hdu 4508 湫湫系列故事——减肥记I(完全背包)
题意:完全背包
思路:完全背包
可以直接转化为 多重背包,num[i]=_v/c[i];//转为多重背包
然后运用 多重背包 3种解法如下
码1:
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- using namespace std;
- int dp[];
- int main()
- {
- int i,j,k,tem;
- int t,n,_v;//测试用例个数,物品种类,背包大小
- int c[],v[];//花费,价值
- int num[];//每种物品个数
- int tc,tv;//拆分时物品花费,价值
- while(~scanf("%d",&n))
- {
- memset(dp,,sizeof(dp));
- for(i=; i<=n; ++i)scanf("%d%d",&v[i],&c[i]);
- scanf("%d",&_v);
- for(i=; i<=n; ++i)num[i]=_v/c[i];//转为多重背包
- //////
- for(i=; i<=n; ++i)
- for(k=_v; k>=c[i]; --k)
- for(j=; j<=num[i]&&j*c[i]<=k; ++j)//此处比01背包多了一层循环
- {
- tc=j*c[i];
- tv=j*v[i];
- tem=dp[k-tc]+tv;
- if(tem>dp[k])dp[k]=tem;
- }
- //
- printf("%d\n",dp[_v]);
- }
- return ;
- }
码2:
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- using namespace std;
- int dp[];
- int main()
- {
- int i,j,k,tem;
- int t,n,_v;//测试用例个数,物品种类,背包大小
- int c[],v[];//花费,价值
- int num[];//每种物品个数
- int tc,tv;//拆分时物品花费,价值
- while(~scanf("%d",&n))
- {
- memset(dp,,sizeof(dp));
- for(i=; i<=n; ++i)scanf("%d%d",&v[i],&c[i]);
- scanf("%d",&_v);
- for(i=; i<=n; ++i)num[i]=_v/c[i];//转为多重背包
- //////
- for(i=; i<=n; ++i)
- for(j=; j<=num[i]&&j*c[i]<=_v; ++j)//此处比01背包多了一层循环
- for(k=_v; k>=j*c[i]; --k)
- {
- tem=dp[k-c[i]]+v[i];
- if(tem>dp[k])dp[k]=tem;
- }
- //
- printf("%d\n",dp[_v]);
- }
- return ;
- }
码3:
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- using namespace std;
- int dp[];
- int main()
- {
- int i,j,k,tem;
- int t,n,_v;//测试用例个数,物品种类,背包大小
- int c[],v[];//花费,价值
- int num[];//每种物品个数
- int tc,tv;//拆分时物品花费,价值
- while(~scanf("%d",&n))
- {
- memset(dp,,sizeof(dp));
- for(i=; i<=n; ++i)scanf("%d%d",&v[i],&c[i]);
- scanf("%d",&_v);
- for(i=; i<=n; ++i)num[i]=_v/c[i];//转为多重背包
- //////
- for(i=; i<=n; ++i)
- {
- for(j=; j<=num[i]; num[i]=num[i]-j,j=j*)//此处比01背包多了一层循环
- {
- tc=j*c[i];//拆分后物品花费
- tv=j*v[i];//
- for(k=_v; k>=tc; --k)
- {
- tem=dp[k-tc]+tv;
- if(tem>dp[k])dp[k]=tem;
- }
- }
- if(num[i]>) //如果还有物品,num[i] 即相当于 1+2+4+...+q 中的 q
- {
- tc=num[i]*c[i];
- tv=num[i]*v[i];
- for(k=_v; k>=tc; --k)
- {
- tem=dp[k-tc]+tv;
- if(tem>dp[k])dp[k]=tem;
- }
- }
- }
- //
- printf("%d\n",dp[_v]);
- }
- return ;
- }
另外:附一种更高效的方法 O(n*_v)
与01背包代码中内层循环相反
1...n
0..._v
码4:
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- using namespace std;
- int dp[];
- int main()
- {
- int i,j;
- int t,n,_v;//测试用例个数,物品种类,背包大小
- int c[],v[];//花费,价值
- while(~scanf("%d",&n))
- {
- memset(dp,,sizeof(dp));
- for(i=; i<=n; ++i)scanf("%d%d",&v[i],&c[i]);
- scanf("%d",&_v);
- for(i=; i<=n; ++i)
- for(j=c[i];j<=_v;++j)
- if(dp[j-c[i]]+v[i]>dp[j])dp[j]=dp[j-c[i]]+v[i];
- printf("%d\n",dp[_v]);
- }
- return ;
- }
hdu 4508 湫湫系列故事——减肥记I(完全背包)的更多相关文章
- HDU 4508 湫湫系列故事——减肥记I(全然背包)
HDU 4508 湫湫系列故事--减肥记I(全然背包) http://acm.hdu.edu.cn/showproblem.php?pid=4508 题意: 有n种食物, 每种食物吃了能获得val[i ...
- 完全背包问题:湫湫系列故事――减肥记I(HDU 4508)
湫湫系列故事――减肥记I HDU 4508 一道裸的完全背包 #include<iostream> #include<algorithm> #include<stdio ...
- HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包)
HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包) 题意分析 裸完全背包 代码总览 #include <iostream> #include <cstdio& ...
- HDUOJ----湫湫系列故事——减肥记I
湫湫系列故事——减肥记I Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- hdu4508 完全背包,湫湫系列故事——减肥记I
湫湫系列故事——减肥记I 对于01背包和完全背包,昨晚快睡着的时候,突然就来了灵感 区别:dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值 在第二重循环,01 是倒着循环的,因 ...
- HDUOJ----4509湫湫系列故事——减肥记II
湫湫系列故事——减肥记II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- G - 湫湫系列故事——减肥记I
G - 湫湫系列故事——减肥记I Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- M - 湫湫系列故事——减肥记I
M - 湫湫系列故事--减肥记I 对于吃货来说,过年最幸福的事就是吃了,没有之一! 但是对于女生来说,卡路里(热量)是天敌啊! 资深美女湫湫深谙"胖来如山倒,胖去如抽丝"的道理,所 ...
- HDU 4508 湫湫系列故事——减肥记I (2013腾讯编程马拉松初赛第一场)
http://acm.hdu.edu.cn/showproblem.php?pid=4508 题目大意: 给定一些数据. 每组数据以一个整数n开始,表示每天的食物清单有n种食物. 接下来n行,每行两 ...
- 【完全背包】HDU 4508 湫湫系列故事——减肥记I
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission(s) ...
随机推荐
- 一行代码设置TForm颜色的前世今生(属性赋值引起函数调用,然后发消息实现改变显示效果),TForm的初始颜色在dfm中设置了clBtnFace色
来自万一的帖子:http://www.cnblogs.com/del/archive/2008/04/27/1173658.html的确做到了一行代码设置TForm控件的颜色(一点感想:Delphi程 ...
- WordPress主题制作教程8:自定义page模版
创建新文件,头部注释 <?php /* Template Name: 新的page模版 */ ?> 在页面编辑右栏体现:
- MyBaits的各种基本查询方式
<?xml version="1.0" encoding="gbk"?> <!DOCTYPE mapper PUBLIC "-//m ...
- hihoCoder 1082然而沼跃鱼早就看穿了一切 (字符串处理)
http://hihocoder.com/problemset/problem/1082 首先将字符串全部字母变成小写,不断用find查找字符串中的Marshtomp,并把每个字符变为’#‘ ,最后统 ...
- asp天猫自主发码的请求
这几天在做天猫自主发码.实现了通知和核销部门.其他的部分待后续实现. 值得注意的是consume回调中,要加入sign_method=md5
- Android HTTPS(5)SSL测试工具
Nogotofail: A Network Traffic Security Testing Tool Nogotofail is a tool gives you an easy way to co ...
- [HDOJ1171]Big Event in HDU(01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 许多有价值的物品,有重复.问如何将他们分成两堆,使两堆价值之差最小. 对价值求和,转换成01背包 ...
- 利用XPath读取Xml文件
之所以要引入XPath的概念,目的就是为了在匹配XML文档结构树时能够准确地找到某一个节点元素.可以把XPath比作文件管理路径:通过文件管理路 径,可以按照一定的规则查找到所需要的文件:同样,依据X ...
- oracle教程:PLSQL常用方法汇总
oracle教程:PLSQL常用方法汇总 在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set ...
- Gradle学习系列(一)
今天就开始学习Gradle构建了,听说很牛X.本篇内容就带领我初步窥探Gradle的世界. 1.什么是Gradle 相信之前都接触过用Ant或者Meavn进行项目的构建,两者各有千 ...