多重背包模板
来源:互联网 发布:传奇霸业翅膀升级数据 编辑:程序博客网 时间:2024/05/01 06:05
//多重背包//HDU 1059//题意:价值分别为1,2,3,4,5,6的物品的个数分别为 a[1],a[2],````a[6]//问能不能分成两堆价值相等的 #include<stdio.h>#include<string.h>int a[7];int f[120005];int v,k;void ZeroOnePack(int cost,int weight)//cost 为费用, weight 为价值 { for(int i=v;i>=cost;i--) if(f[i-cost]+weight>f[i]) f[i]=f[i-cost]+weight;} void CompletePack(int cost,int weight){ for(int i=cost;i<=v;i++) if(f[i-cost]+weight>f[i]) f[i]=f[i-cost]+weight;} void MultiplePack(int cost ,int weight,int amount){ if(cost*amount>=v) CompletePack(cost,weight); else { for(int k=1;k<amount;) { ZeroOnePack(k*cost,k*weight); amount-=k; k<<=1; } ZeroOnePack(amount*cost,amount*weight); } } int main(){ int tol; int iCase=0; while(1) { iCase++; tol=0; for(int i=1;i<7;i++) { scanf("%d",&a[i]); tol+=a[i]*i;//总价值数 } if(tol==0) break; if(tol%2==1) { printf("Collection #%d:\nCan't be divided.\n\n",iCase); continue; } else { v=tol/2; memset(f,0,sizeof(f)); for(int i=1;i<7;i++) MultiplePack(i,i,a[i]); if(f[v]==v) printf("Collection #%d:\nCan be divided.\n\n",iCase); else printf("Collection #%d:\nCan't be divided.\n\n",iCase); } } return 0; }
0 0
- 多重背包模板
- 多重背包模板
- 模板多重背包
- 多重背包模板
- 多重背包模板
- MultiplePack - 多重背包模板
- 多重背包模板
- 【多重背包】HDU2844Coins【模板】
- 多重背包模板
- 【常用模板】 多重背包
- 多重背包模板
- 多重背包模板
- 多重背包模板
- 多重背包问题模板
- 完全背包多重背包模板
- 01背包、完全背包、多重背包模板
- 模板-01背包-完全背包-多重背包
- 01背包、完全背包、多重背包模板
- Java设计模式--单例模式
- ubuntu 下如何以root身份登录
- 二分+dp,在一个地方上卡了2小时
- 机器学习领域的五大流派
- 有两个32bit的数A、B,使用下面方式得到32bit的数C、D。哪一种可以使用C、D得到A、B的值?
- 多重背包模板
- openwrt 开机启动
- 模拟strstr函数
- Directx学习笔记【二】 将win32基本框架封装成类
- Java中的位运算机制详解
- Qt之国际化--多语言动态切换
- (中国剩余定理模版)hdoj 5768 Lucky7
- 深度学习-LeCun、Bengio和Hinton的联合综述(上)
- Linux mint17操作系统下mentohust校园网认证解决方法