hdu 3496 Watch The Movie(DP)

点击打开链接

题目意思:

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


原文地址:https://www.cnblogs.com/yyf573462811/p/6365143.html