iscsi

KiloManX SRM 181 div1 Level 3

Dec 22nd, 2011
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <algorithm>
  2. #include <ctime>
  3. #include <iostream>
  4. #include <sstream>
  5. #include <string>
  6. #include <vector>
  7. #include <queue>
  8. #include <set>
  9. #include <map>
  10. #include <cstdio>
  11. #include <cstdlib>
  12. #include <cctype>
  13. #include <cmath>
  14.  
  15. using namespace std;
  16. typedef unsigned long long LL;
  17. #define FOR(k,a,b) for(int k(a); k < (b); ++k)
  18. #define FORD(k,a,b) for(int k(a-1); k >= (b); --k)
  19. #define REP(k,a) for(int k=0; k < (a); ++k)
  20. #define ABS(a) ((a)>0?(a):-(a))
  21.  
  22. class KiloManX {
  23.     public:
  24.     int leastShots(vector <string> damageChart, vector <int> bossHealth)
  25.     {
  26.         int n=damageChart.size();
  27.         vector<vector<int> > dc(n,vector<int> (n));
  28.         REP(i,n)
  29.         REP(j,n)
  30.         {
  31.             dc[i][j]=damageChart[i][j]-'0';
  32.         }
  33.         vector<int> dp((1<<n),100000000);
  34.         dp[0]=0;
  35.         REP(i,1<<n)
  36.         {
  37.             REP(j,n)
  38.             if((1<<j) & ~i)
  39.             {
  40.                 int best=1;
  41.                 REP(k,n)
  42.                 if(((1<<k)&i) && (dc[k][j]>best))
  43.                 {
  44.                     best=dc[k][j];
  45.                 }
  46.                 dp[i|(1<<j)]=min(dp[i|(1<<j)],dp[i]+(bossHealth[j]+best-1)/best);
  47.             }
  48.         }
  49.         return dp.back();
  50.     }
  51. };
Advertisement
Add Comment
Please, Sign In to add comment