HDU 1059 多重背包问题
2024-08-30 21:21:10
问题大意:
有价值1-6的六种物品,分别规定其数目,问是否存在一种方法能使这些物品不拆分就能平均分给两个人
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; int v[] , ans , k;
int dp[];
//0-1背包
void zeroPack(int w , int v)
{
for(int i = ans ; i>=w ; i--)
dp[i] = max(dp[i] , dp[i - w]+v);
}
//完全背包
void compPack(int w , int v)
{
for(int i = w ; i<=ans ; i++)
dp[i] = max(dp[i] , dp[i - w]+v);
}
//多重背包
void multiPack(int n , int w , int v)
{
if(n*v > ans) compPack(w , v);
else{
int t = ;
while(n >= t){
zeroPack(t*w , t*v);
n-=t;
t <<= ;
}
if(n > ) zeroPack(n*w , n*v);
}
} int main()
{
int cas = ;
while(){
ans = ;
k = ;
for(int i = ; i< ; i++){
scanf("%d" , v+i);
ans += v[i]*(i+);
}
if(ans == ) break; if(ans & ){
printf("Collection #%d:\n" , ++cas);
puts("Can't be divided.");
puts("");
continue;
}
ans >>= ;
memset(dp , , sizeof(dp));
for(int i = ; i< ; i++){
multiPack(v[i] , i+ , i+);
} if(dp[ans] == ans){
printf("Collection #%d:\nCan be divided.\n\n" , ++cas);
}
else printf("Collection #%d:\nCan't be divided.\n\n" , ++cas);
}
return ;
}
最新文章
- 使用jquery脚本获取随笔、文章和评论的统计数,自定义显示位置
- JS转换HTML转义符
- Using Spring Boot without the parent POM
- JAVA学习Swing绝对局部简单学习
- POJ 3026 : Borg Maze(BFS + Prim)
- Silverlight中动画的性能浅析
- openstack 入门1
- IIS Express总结
- 从零开始学习前端开发 — 2、CSS基础
- Java 学习笔记 (六) Java 定义变量
- Bootstrap modal常用参数、方法和事件
- 【原创】运维基础之Zabbix(1)简介、安装、使用
- hdu 1999 不可摸数 筛选素数 两次打表
- vim命令以及gcc编译器的常用cmd
- WPF自定义进度条
- HTML5开源RPG游戏引擎lufylegendRPG 1.0.0发布
- [转]解读ASP.NET 5 &; MVC6系列(8):Session与Caching
- (转)详解HTML网页源码的charset格式
- shell实现洗牌随机
- Python 综合应用小项目一
热门文章
- bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑【矩阵乘法+Floyd】
- P4196 [CQOI2006]凸多边形
- 洛谷 P3372 【模板】线段树 加法
- 树形DP URAL 1039 Anniversary Party
- 二分图最大匹配(匈牙利算法) UVA 10080 Gopher II
- Linux环境下卸载、安装及配置MySQL5.1
- 聊聊MyBatis缓存机制
- C#手机充值系统开发(基于聚合数据)
- js实现左右点击图片层叠滚动特效
- LN : leetcode 513 Find Bottom Left Tree Value