Advertisement
Josif_tepe

Untitled

Feb 13th, 2023
687
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5. #include <cmath>
  6. #include <map>
  7. #include <cstring>
  8. using namespace std;
  9. int n, m;
  10. int mat[105][16];
  11. int dp[105][1 << 15];
  12. int rec(int at, int bitmask) {
  13.     if(__builtin_popcount(bitmask) == m) {
  14.         return 0;
  15.     }
  16.     if(at == n) {
  17.         return 1e9;
  18.     }
  19.     if(dp[at][bitmask] != -1) {
  20.         return dp[at][bitmask];
  21.     }
  22.     int result = 1e9;
  23.    
  24.     for(int i = 0; i < m; i++) {
  25.         if((bitmask & (1 << i)) == 0) {
  26.             int new_mask = bitmask | (1 << i);
  27.             result = min(result, rec(at + 1, new_mask) + mat[at][i]);
  28.         }
  29.     }
  30.     result = min(result, rec(at + 1, bitmask));
  31.     return dp[at][bitmask] = result;
  32. }
  33. int main() {
  34.     cin >> n >> m;
  35.     vector<int> cost(m, 0);
  36.     for(int i = 0; i < n; i++) {
  37.         for(int j = 0; j < m; j++) {
  38.             cin >> mat[i][j];
  39.             cost[j] += mat[i][j];
  40.         }
  41.     }
  42.     memset(dp, -1, sizeof dp);
  43.     for(int i = 0; i < n; i++) {
  44.         for(int j = 0; j < m; j++) {
  45.             mat[i][j] = cost[j] - mat[i][j];
  46.         }
  47.     }
  48.     cout << rec(0, 0) << endl;
  49.     return 0;
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement