poj 1014 Dividing
2013-02-27 16:04
267 查看
多重背包即可
设dp[j] 表示是否可能分出价值为j的石头
最后判断dp[total/2]是否为真即可
贴代码
设dp[j] 表示是否可能分出价值为j的石头
最后判断dp[total/2]是否为真即可
贴代码
#include <string.h> #include <iostream> #include <stdio.h> using namespace std; int num[7]; bool dp[120001]; int main(void){ //freopen("","r",stdin); int t = 1; for(;;){ int total = 0; for(int i = 0;i<6;i++){ scanf("%d",&num[i]); total+= num[i]*(i+1); } if(!total) break; if(total&1){ printf("Collection #%d:\nCan't be divided.\n\n",t++); continue; } memset(dp,0,sizeof(dp)); dp[0] = true; for(int i = 0;i<6;i++){ int k; for(k = 1;k*2<=num[i];k*=2){ for(int j = total/2;j>=(i+1)*k;j--) if(dp[j-(i+1)*k]) dp[j] = true; } k = num[i] - k + 1; for(int j = total/2;j>=(i+1)*k;j--){ if(dp[j-(i+1)*k]) dp[j] = true; } } if(!dp[total/2]) printf("Collection #%d:\nCan't be divided.\n",t++); else printf("Collection #%d:\nCan be divided.\n",t++); printf("\n"); } }
相关文章推荐
- poj1014 Dividing(多重背包的二进制优化)
- poj 1014 Dividing(多重背包可行性解)
- POJ 1014 Dividing(二进制优化+多重背包)
- DFS(DP)---POJ 1014(Dividing)
- [poj 1014]Dividing的DFS解法解读和DP解法
- POJ 1014 Dividing 解答
- poj 1014 Dividing <多重背包>
- POJ 1014 Dividing
- POJ 1014 Dividing (多重可行性背包)
- POJ 1014 Dividing 这算是优化吗
- POJ-1014-Dividing
- 【DP|多重背包可行性】POJ-1014 Dividing
- Poj 1014 Dividing(多重背包)
- POJ 1014 Dividing (动态规划、多重背包)
- 动态规划 :POJ 1014 Dividing
- poj 1014 Dividing 【多重背包】
- POJ 1014 Dividing(多重背包+二进制优化)
- POJ 1014 Dividing(多重背包 + 二进制优化 + 01背包)
- poj1014 hdu1059 Dividing 多重背包
- Dividing - POJ 1014 dp背包