您的位置:首页 > 其它

hdu 3496 Watch The Movie(DP)

2012-11-24 18:36 393 查看
点击打开链接

题目意思:

**要在今晚看电影,所以让她叔叔给她买电影,但看电影的时间有限,并且商店卖的电影数目也是一定的。每个电影都有以一个价值。求最大价值。如果多买的电影没看完,输出0;

有T组数据,给你一个n表示有n种电影,一个m表示商店最多卖的电影数目,一个l表示这个晚上所允许花费的来看电影的时间;下面n行输入每部电影的时间和价值;

dp[j][k]=max(dp[j-1][k-cost[i]]+value[i])

dp[j][k]表示,花费时间k看j部电影所得的最大价值;

最后只要判断dp[m][l]是否存在就可以了!

#include"stdio.h"
#include"string.h"
#define max(x,y) x>y?x:y;
int dp[101][1001];
int main()
{
int n,m,l,i,j,k;
int t,cost[101],value[101];
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&l);
for(i=1;i<=n;i++)
scanf("%d%d",&cost[i],&value[i]);
memset(dp,-1,sizeof(dp));
for(i=0;i<=l;i++)
dp[0][i]=0;
for(i=1;i<=n;i++)
{
for(j=m;j>=1;j--)
{
for(k=l;k>=cost[i];k--)
if(dp[j-1][k-cost[i]]!=-1)
dp[j][k]=max(dp[j][k],dp[j-1][k-cost[i]]+value[i]);
}
}
if(dp[m][l]==-1)dp[m][l]=0;
printf("%d\n",dp[m][l]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: