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