hdu1059 Dividing (多重背包)
来源:互联网 发布:淘宝网店水印在线制作 编辑:程序博客网 时间:2024/05/29 06:48
链接点我点我点我
简单多重背包
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;int dp[120100],a[7];int v,k; //v为体积void ZeroOnePack(int cost,int weight) //weight为价值,cost为花费{ for(int i=v;i>=cost;i--) dp[i]=max(dp[i],dp[i-cost]+weight);}void CompletePack(int cost,int weight){ for(int i=cost;i<=v;i++) dp[i]=max(dp[i],dp[i-cost]+weight);}void MultipliesPack(int cost,int weight,int amount){ if(cost*amount>=v) CompletePack(cost,weight); else { for(k=1;k<amount;) { ZeroOnePack(k*cost,k*weight); amount-=k; k<<=1; } ZeroOnePack(amount*cost,amount*weight); }}int main(){ int cas=0,sum; while(1) { cas++; sum=0; for(int i=1;i<=6;i++) { scanf("%d",&a[i]); sum+=a[i]*i; } if(!sum)break; if(sum%2) { printf("Collection #%d:\nCan't be divided.\n\n",cas); continue; } else { v=sum/2; memset(dp,0,sizeof(dp)); for(int i=1;i<=6;i++) MultipliesPack(i,i,a[i]); if(dp[v]==v) printf("Collection #%d:\nCan be divided.\n\n",cas); else printf("Collection #%d:\nCan't be divided.\n\n",cas); } } return 0;}
0 0
- hdu1059 Dividing (多重背包)
- hdu1059 Dividing(多重背包)
- HDU1059 Dividing (多重背包)
- HDU1059 Dividing(多重背包)
- hdu1059 Dividing 多重背包
- [hdu1059]Dividing 多重背包
- hdu1059 Dividing (多重背包)
- hdu1059 Dividing 【多重背包】
- hdu1059 Dividing(多重背包+二进制优化)
- hdu1059 Dividing(多重背包+二进制优化)
- HDU1059:Dividing(多重背包二进制优化)
- HDU1059 && POJ1014 :Dividing(多重背包)
- hdu1059 &poj1014 Dividing (多重背包)
- HDU1059 Dividing 多重背包 ACM
- poj1014 hdu1059 Dividing 多重背包
- HDU1059 && POJ1014 :Dividing(多重背包)
- ZOJ1149 POJ1014 HDU1059 Dividing,多重背包问题
- 【二进制拆分多重背包】【HDU1059】【Dividing】
- 农夫过河问题(图的邻接矩阵)
- hdu 3951(博弈,成环)
- 使用MP4V2开源库将AAC打包到MP4文件中
- Android 网络编程
- 多段图问题(图的邻接表)
- hdu1059 Dividing (多重背包)
- iOS中设置scrollView的偏移量(开始的位置)
- 单源最短路径(图的邻接矩阵)
- REST接口
- RecycleView + SwipeRefreshLayout 实现下拉刷新
- 《leetCode》:Rotate List
- 【NVIDIA Jetson TK1】一,开发板重装ubuntu系统,重新刷机,重新烧系统,恢复系统
- 深入理解BootStrap Item4 -- 表格
- [Unity3D] 通过修改PlayMaker源代码实现进化版的FSM