poj 1041-Dividing解题报告-可行性背包问题
2012-05-15 23:58
344 查看
题意是说,给一些大理石,每种有num[i]个,判断能否分成两部分,可行性问题,感觉不像是动态规划,中间没有最优子结构这个性质,倒像是纯粹的递推
View Code
View Code
#include<stdio.h> #include<string.h> #define N 60005 int bag[7]; int v ; bool dp ; int main() { int sum; int i,j,k,ans; int icase=1; while(1) { sum=0; for(i=1;i<=6;i++) { scanf("%d",&bag[i]); sum+=bag[i]*i; } if(!sum) break; printf("Collection #%d:\n",icase++); if(sum&1) { printf("Can't be divided.\n\n"); continue; } memset(dp,0,sizeof(dp)); ans=sum>>1; k=0; for(i=1;i<=6;i++) { j=1; while(j<=bag[i]) { bag[i]-=j; v[k++]=j*i; j<<=1; } if(bag[i]) v[k++]=bag[i]*i; } dp[0]=true; for(i=0;i<k;i++) for(j=ans;j>=v[i];j--) if(dp[j-v[i]]) dp[j]=true; if(dp[ans]) printf("Can be divided.\n\n"); else printf("Can't be divided.\n\n"); } return 0; }
相关文章推荐
- 0-1背包问题,poj 3624 Charm Bracelet动态规划-解题报告,增加最优路径构建
- [dp问题] Poj 1014 & Zoj 1149 (Dividing) 解题报告(转)
- poj 2063 Investment(背包问题)(解题报告)
- POJ 2964 日历问题 解题报告
- POJ 1014 Dividing (多重可行性背包)
- POJ 2746 约瑟夫问题 解题报告
- ZOJ1149 POJ1014 HDU1059 Dividing,多重背包问题
- POJ 2692 假币问题 解题报告
- POJ 3264 解题报告 RMQ 问题 ST算法
- 解题报告:POJ 1837 Balance 01背包变形
- POJ_1014 Dividing(多重背包问题)
- 0-1背包问题(动态规划) 解题报告
- 背包问题 3 多重背包 解题报告
- POJ - 1129 Channel Allocation解题报告(涂色问题+四色定理)
- POJ 2373-Dividing the Path解题报告
- POJ1321 棋盘问题 解题报告
- POJ 1041 解题报告 John's trip
- POJ1014:Dividing<动归,背包问题>
- 【解题报告】 POJ 1556 The Doors -- 最短路问题 Dijkstra算法 + 直线相交
- 【DP|多重背包可行性】POJ-1014 Dividing