Advertisement
Abrar_Al_Samit

Agent 47 (LOJ 1037)

Jul 28th, 2021
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7.  
  8.  
  9. #define debug(x) cerr << '[' << (#x) << "] = " << x << '\n'
  10.  
  11. template<class T> using ordered_set = tree<T, null_type , less<T> , rb_tree_tag , tree_order_statistics_node_update> ;
  12.  
  13. int N;
  14. int health[15];
  15. int weapon[15][15];
  16. int dp[15][1<<15];
  17. int solve(int i, int mask, vector<int>damage) {
  18.     int &ret = dp[i][mask];
  19.     if(ret!=-1) return ret;
  20.     ret = INT_MAX;
  21.     int cur = (health[i] + damage[i] - 1) / damage[i];
  22.    
  23.     for(int j=0; j<N; ++j) damage[j] = max(damage[j], weapon[i][j]);
  24.     for(int j=0; j<N; ++j) if(~mask >> j & 1) {
  25.         ret = min(ret, solve(j, mask|(1<<j), damage));
  26.     }
  27.     if(ret==INT_MAX) ret = 0;
  28.     ret += cur;
  29.     return ret;
  30.  
  31. }
  32. void PlayGround(int T) {
  33.     cin >> N;
  34.     for(int i=0; i<N; ++i) for(int j=0; j<(1<<15); ++j)
  35.         dp[i][j] = -1;
  36.     for(int i=0; i<N; ++i) cin >> health[i];
  37.     for(int i=0; i<N; ++i) {
  38.         for(int j=0; j<N; ++j) {
  39.             char c; cin >> c;
  40.             weapon[i][j] = c - '0';
  41.         }
  42.     }
  43.     vector<int>damage(N, 1);
  44.     int ans = INT_MAX;
  45.     for(int i=0; i<N; ++i) ans = min(ans, solve(i, (1<<i), damage));
  46.     cout << "Case " << T << ": " << ans << '\n';
  47.  
  48.     #ifndef ONLINE_JUDGE
  49.         cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  50.     #endif
  51. }
  52. int main() {
  53.     ios_base::sync_with_stdio(0);
  54.     cin.tie(0);
  55.     cout.tie(0);
  56.     #ifndef ONLINE_JUDGE
  57.         freopen("input.txt", "r", stdin);
  58.     #endif
  59.     int T;
  60.     cin >> T;
  61.     for(int i=1; i<=T; ++i)
  62.     PlayGround(i);
  63.  
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement