hdu 3449 Consumer 有依赖关系的背包
2018-02-11 20:00
316 查看
先默认把所有的主件都买上,之后01附件的。最后比较不买主件的额即可
#include<stdio.h>
#include<string.h>
int dp[11000][11000];//前i个箱子花费j元所得的价值
int n,t,box,num;
int main ()
{
while(cin>>n>>t)
{
memset(dp,-1,sizeof(dp)); //有依赖关系,要赋初值-1
memset(dp[0],0,sizeof(dp[0]));
for(i=1;i<=n;i++)
{
cin>>box>>num;
for(k=box;k<=t;k++) //我要买这个箱子,先把这个箱子给买了
dp[i][k]=dp[i-1][k-box];
for(j=0;j<num;j++) //之后对于当前箱子
int c,w;
cin>>c>>w;
for(k=t;k>=c;k--) //01
{
if(dp[i][k-c]!=-1) //买了箱子
dp[i][k]=max(dp[i][k],dp[i][k-c]+w);
}
}
for(j=0;j<=t;j++)
{ // 之前都是算作买箱子,这次是不买箱子
dp[i][j]=max(dp[i-1][j],dp[i][j]);
}
}
cout<<dp
[t]<<endl;
}
return 0;
}
#include<stdio.h>
#include<string.h>
int dp[11000][11000];//前i个箱子花费j元所得的价值
int n,t,box,num;
int main ()
{
while(cin>>n>>t)
{
memset(dp,-1,sizeof(dp)); //有依赖关系,要赋初值-1
memset(dp[0],0,sizeof(dp[0]));
for(i=1;i<=n;i++)
{
cin>>box>>num;
for(k=box;k<=t;k++) //我要买这个箱子,先把这个箱子给买了
dp[i][k]=dp[i-1][k-box];
for(j=0;j<num;j++) //之后对于当前箱子
int c,w;
cin>>c>>w;
for(k=t;k>=c;k--) //01
{
if(dp[i][k-c]!=-1) //买了箱子
dp[i][k]=max(dp[i][k],dp[i][k-c]+w);
}
}
for(j=0;j<=t;j++)
{ // 之前都是算作买箱子,这次是不买箱子
dp[i][j]=max(dp[i-1][j],dp[i][j]);
}
}
cout<<dp
[t]<<endl;
}
return 0;
}
相关文章推荐
- HDU 3449:Consumer(有依赖关系的背包)
- HDU 3449 Consumer 详细题解(依赖背包)
- Consumer (HDU_3449) 有依赖的背包问题
- HDU 3449—— Consumer(有依赖的背包)
- HDU 3449 Consumer 依赖背包 入门题
- HDU 3449 Consumer 依赖背包
- HDU-3449 Consumer(依赖背包)
- HDU 3449 Consumer(依赖背包)
- hdu 3449 consumer 有依赖的背包问题
- HDU 3449 Consumer 【有依赖背包】【dp】
- hdu 3449(依赖背包) Consumer
- hdu 3449 Consumer 依赖背包 经典的背包类型
- hdu 3449 Consumer 依赖背包
- hdu-3449 Consumer(典型的依赖背包)
- HDU 3449 Consumer(依赖背包)
- HDU - 3449 Consumer(有依赖的背包问题)
- HDU 3449 Consumer (依赖背包)
- HDU 3449 Consumer(有依赖背包)
- hdu 3449 Consumer(依赖背包)
- HDU 3449 Consumer 依赖背包 入门题