fork download
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int INF = 0x3f3f3f3f;
  7. int dp[11][1<<11], pl[11][11];
  8.  
  9. int solve(int pos, int mask) {
  10. if(pos == 11) {
  11. if(mask != (1<<11)-1) return -INF;
  12. else return 0;
  13. }
  14. if(dp[pos][mask] > -1) return dp[pos][mask];
  15. int &ret = dp[pos][mask]; ret = -INF;
  16. for(int i = 0, temp; i < 11; i++) {
  17. if(pl[i][pos] && !(mask&(1<<i))) {
  18. temp = pl[i][pos] + solve(pos + 1, mask | (1 << i));
  19. ret = max(ret, temp);
  20. }
  21. }
  22. return ret;
  23. }
  24.  
  25. int main() {
  26. int test, i, j;
  27. scanf("%d", &test);
  28. while(test--) {
  29. for(i = 0; i < 11; i++)
  30. for(j = 0; j < 11; j++)
  31. scanf("%d", &pl[i][j]);
  32. memset(dp, -1, sizeof(dp));
  33. printf("%d\n", solve(0, 0));
  34. }
  35. return 0;
  36. }
Success #stdin #stdout 0s 2988KB
stdin
1
100 0 0 0 0 0 0 0 0 0 0
0 80 70 70 60 0 0 0 0 0 0
0 40 90 90 40 0 0 0 0 0 0
0 40 85 85 33 0 0 0 0 0 0
0 70 60 60 85 0 0 0 0 0 0
0 0 0 0 0 95 70 60 60 0 0
0 45 0 0 0 80 90 50 70 0 0
0 0 0 0 0 40 90 90 40 70 0
0 0 0 0 0 0 50 70 85 50 0
0 0 0 0 0 0 66 60 0 80 80
0 0 0 0 0 0 50 50 0 90 88
stdout
970