POJ 2923 Relocation / 状态压缩DP

2014-11-24 10:52:34 · 作者: · 浏览: 0

和以前做的差不多

n《=10 很容易忘状态压缩那里想

预处理一下 哪几个物品可以一次运完 可以的话用一个二进制表示 并且dp[state] = 1 表示一次就可以

然后平常那样做状态压缩DP就行了

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; const int maxn = 12; const int INF = 999999999; int n, m1, m2; int a[maxn]; int b[1<
      
       = a[i]; j--) d[j] |= d[j-a[i]]; } } for(int i = 0; i <= m1; i++) { if(d[i] && sum-i <= m2) return true; } return false; } int main() { int cas = 1; int T; scanf("%d", &T); while(T--) { scanf("%d %d %d", &n, &m1, &m2); for(int i = 0; i < n; i++) scanf("%d", &a[i]); int l = 0; for(int i = 1; i < (1<