hdu 3496 二维0-1背包
来源:互联网 发布:淘宝服装质检标准 编辑:程序博客网 时间:2024/06/10 19:55
http://acm.hdu.edu.cn/showproblem.php?pid=3496
很典型的一道二维背包的题目,在保证时间不超出l的情况下还要保证碟片恰好为m。第一次做二维背包,错了n多次,原来才发现数组中应该为i,不应该为j。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
const int inf=100000000;
struct node
{
int t,v;
}a[103];
int dp[103][1003];//dp[i][j]表示买i部花费时间为j的碟片所获得的价值
int n,m,l;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
scanf("%d%d%d",&n,&m,&l);
for(int i=0;i<n;i++)
scanf("%d%d",&a[i].t,&a[i].v);
//初始化这一块,如果是恰好能装满除dp[0][0]=0外,
//其余都初始化为负无穷
for(int i=0;i<=n;i++)
for(int j=0;j<=l;j++)
dp[i][j]=-inf;
dp[0][0]=0;
for(int i=0;i<n;i++)
{
int minx=min(i+1,m);
for(int j=minx;j>0;j--)
{
for(int k=l;k>=a[i].t;k--)
dp[j][k]=max(dp[j][k],dp[j-1][k-a[i].t]+a[i].v);//这里wrong了n次,原来写成j了。。。。。。。
}
}
//if(dp[m][l]==0) {cout<<"0"<<endl;continue;}
int maxx=-1;
for(int i=1;i<=l;i++)
if(maxx<dp[m][i])
maxx=dp[m][i];
if(maxx==-1) {cout<<"0"<<endl;continue;}
printf("%d\n",maxx);
}
return 0;
}
- hdu 3496 二维0-1背包
- HDU 3496 二维背包
- hdu 3496 Watch The Movie(二维0/1背包)
- HDU 2159 FATE 二维0-1背包
- hdu 3496 二维费用背包
- hdu 3496 二维费用背包
- hdu 3496 二维背包 01
- DP--二维背包-- HDU - 3496
- hdu 3496 二维费用背包
- hdu 2126 Buy the souvenirs(二维0/1背包)
- HDU 3496 Watch The Movie【二维费用的0/1背包问题】
- hdu 3496 Watch The Movie(二维背包)
- HDU 3496 Watch The Movie (二维背包)
- HDU 3496 Watch The Movie 二维背包
- HDU 3496 Watch The Movie 二维背包
- hdu 3496 二维费用背包(蛋疼)
- HDU 2159 二维背包
- hdu-2151 二维背包
- SoundPool使用
- 震撼烙印文字效果
- linux内存学习笔记(二)——设备地址到用户空间
- ADO.NET中的五个主要对象
- 由pfile创建spfile
- hdu 3496 二维0-1背包
- oracle with as
- linux学习笔记(六) linux关机命令
- google常用ip
- WCF配置文件注释
- C语言中a[3]和3[a]是一致的
- linux内存学习笔记(三)——静态映射与DMA
- 计算机的发展
- android 开机动画修改