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) ...
随机推荐
- Oracle ->> 行转列, 列转行
除了Pivot和Unpivot这两个函数,还有像CASE WHEN + 聚合函数像MAX,SUM这类的来完成.今天发现Oracle下居然有这样一个和SQL SERVER 2012以后新增的新函数叫II ...
- C and C++ : Partial initialization of automatic structure
Refer to: http://stackoverflow.com/questions/10828294/c-and-c-partial-initialization-of-automatic-st ...
- Maven下使用Jetty进行Debug
1.环境和条件 Maven-3.0.3Eclipse请阅读者事先具备一定maven知识 2 配置2.1 添加Jetty插件 在pom.xml中加入如下代码段 <plugin> <gr ...
- VennDiagram 画文氏图/维恩图/Venn
install.packages("VennDiagram")library(VennDiagram) A = 1:150B = c(121:170,300:320)C = c(2 ...
- URAL1091. Tmutarakan Exams(容斥)
1091 容斥原理 #include <iostream> #include<cstdio> #include<cstring> #include<algor ...
- AutoCompleteTextView与TextWatcher的结合
/******************************************************************************************** * au ...
- UVa 1593 (水题 STL) Alignment of Code
话说STL的I/O流用的还真不多,就着这道题熟练一下. 用了两个新函数: cout << std::setw(width[j]); 这个是设置输出宽度的,但是默认是在右侧补充空格 所 ...
- POJ 3261 (后缀数组 二分) Milk Patterns
这道题和UVa 12206一样,求至少重复出现k次的最长字串. 首先还是二分最长字串的长度len,然后以len为边界对height数组分段,如果有一段包含超过k个后缀则符合要求. #include & ...
- C#中的lock关键字;就是lock住一个大家都共同访问的(静态static的)东东就行了
public class ChatService : IChat //继承IChat接口或者说IChat的实现类 { //定义一个静态对象用于线程部份代码块的锁定,用于lock操作 private s ...
- mysql script for dynamic running sql script
),startTime datetime,endTime datetime) BEGIN set @s1 = concat('SELECT * FROM ', deviceName , ' where ...