hdu 1171 dp(多重背包)
//hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽可能的装满 #include <stdio.h> #include <string.h>//最多50种,每种最多100个,每个价值最大50 //所以所有物品总价值为250000,我们只要dp一半就可以了 #define N 130000 #define M 55int tot_n; int val[M], num[M]; bool dp[N];int main() {while(scanf("%d", &tot_n), tot_n >= 0){int sum_v = 0;memset(dp, false, sizeof(dp));for(int i = 0; i < tot_n; ++i){scanf("%d%d", &val[i], &num[i]);sum_v += val[i] * num[i];}int half = sum_v / 2;dp[0] = true;for(int i = 0; i < tot_n; ++i){ //j 要从后往前,若从0开始,i=0 时(即第i中物品时),在s循环中,//val[i]*s = 10, j = 0的话,val[10] 就会为true,当j 等于10时 又把i种物品放一次//但 dp[10] 本应该是 false 的//若j 从大到小,比如 j = 10时 dp为true,然后放入 val[i]=10 的物品,则标记val[10+10]=true//意思是 容纳的质量为 10 时放入 质量为 10 的物品,则容纳的质量可达到20,则标记为true//标记的是 j 的后面,而j 时递减的,所以不会影响到 dp[j] == true这个判断if(half - val[i] >= 0) //没有这个判断就会超时,也不知道为什么{ //for 的判断应该就会判断了,但他就是超时了,无语for(int j = half - val[i]; j >= 0; --j) //表示背包已经装有 j 的容量 {if(dp[j] == true){ //s记录i中器材的数量for(int s = 1; s <= num[i] && val[i]*s + j <= half; s++)dp[ val[i]*s + j ] = true;}}}}int i;for(i = half; i >= 0; --i) //找背包尽可能装满的大小if(dp[i] == true)break;printf("%d %d\n", sum_v - i, i);}return 0; }
转载于:https://www.cnblogs.com/gabo/archive/2012/04/15/2450216.html
hdu 1171 dp(多重背包)相关推荐
- HDU 2844 Coins 多重背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2844 Coins Time Limit: 2000/1000 MS (Java/Others)Mem ...
- HDU - 2844 Coins(多重背包+完全背包)
题意 给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值. 分析 对\(c[i]*a[i]>=m\)的币,相当于完全背包:\(c[i]*a[i]<m\)的币则是多重背包,考虑 ...
- POJ 1742 Coins ( 经典多重部分和问题 DP || 多重背包 )
题意 : 有 n 种面额的硬币,给出各种面额硬币的数量和和面额数,求最多能搭配出几种不超过 m 的金额? 分析 : 这题可用多重背包来解,但这里不讨论这种做法. 如果之前有接触过背包DP的可以自然想到 ...
- (step3.3) hdu 1059(Dividing——多重背包)
题目大意:分别给出价值为1~6的石头的数量.问能否将这些石头等价值平分... 解题思路:多重背包 1)多重背包的典型描述是这样的:给出n种物品,背包的容量为V.每种物品的可用数量为num[i],所占体 ...
- 【dp - 多重背包】575: Coin Changing
题目: http://acm.swust.edu.cn/#/problem/575/490 题目描述 设有n 种不同面值的硬币,各硬币的面值存于数组T[1:n]中.现要用这些面值的硬币来找钱.可以使用 ...
- HDU 2844 Coins (多重背包)
题目链接 题意:Tony想要买一个东西,他只有n种硬币,每种硬币的面值为a[i],每种硬币的数量为c[i],要买的物品价值不超过m,输出1-m中有多少种价格Tony可以用硬币组合出来. 题解:多重背包 ...
- HDU 1059 Dividing 多重背包
这题想了想用母函数应该也可以做,不过得考虑一个细节,就是加起来的总和是否为奇数,我找了好久一直没找出错误,原来是没考虑奇数.. fuck 这种问题我怎么能不考虑奇数呢..... 啊 啊 啊啊 啊 ...
- Piggy-Bank HDU - 1114(多重背包)
在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持.该活动的主要收入来自于 Irreversibly Bound Money (IBM).思路很简单.任何时候,某位 ACM 会员有少量的钱时 ...
- hdu 3732(01背包转多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 思路:这么大的数据,用01背包肯定会TLE的,01背包转多重背包..最多也就11*11=121件 ...
最新文章
- vcm驱动芯片原理_T6322A|电源芯片的内部设计是怎样的?
- PHP Liunx 服务安全防范方案
- linux rar工具
- python-time.time()
- 实验吧—部分MISC Write up
- 腾讯机智在GTC 2019
- ug11 linux,UG11.0升级包MP02Win#Linux系统下载就上UG网
- oracle sh文件怎么打开,Oracle数据库逻辑备份的SH文件
- 仿英雄联盟比赛直播网页模板
- 女生做产品经理好吗_产品经理如何做产品架构设计
- AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案
- VScode Python no module的解决方法
- Atitit json数据查询法 jsonpath 目录 1.1. 1.概述	1 1.2. 3.2。经营者特殊符号	1 1.3. # JSONPath expressions	2 1.4. Xpa
- 列举在100到200以内的质数
- iOS iPhone X底部设置高度 白色底部显示
- Docker从基础到企业生产应用学习笔记大总结
- 如何通过域名访问服务器文件,如何通过域名访问云服务器
- 2048android源代码,VasSonic Android源码解析
- 1688店铺所有商品API接口(整店商品查询API接口)
- 百度 Hydra 工具在移动端 UI 兼容性测试上的高效应用