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]是否存在就可以了!
题目意思:
**要在今晚看电影,所以让她叔叔给她买电影,但看电影的时间有限,并且商店卖的电影数目也是一定的。每个电影都有以一个价值。求最大价值。如果多买的电影没看完,输出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; }
相关文章推荐
- hdu 3496 Watch The Movie(dp)
- hdu 3496 Watch The Movie(DP)
- HDU 3496 Watch The Movie(DP)
- hdu 3496 Watch The Movie
- HDU 3496 Watch The Movie 二维费用背包
- hdu 3496 Watch The Movie(01背包)
- HDU 3496 Watch The Movie
- HDU 3496 Watch The Movie -- 二维费用背包 费用刚好完全消耗
- HDU - 3496 - Watch The Movie
- HDU 3496 Watch The Movie
- hdu 3496 Watch The Movie
- hdu 3496 Watch The Movie(二维费用的背包问题)
- HDU 3496——Watch The Movie
- hdu 3496 Watch The Movie
- HDU 3496 Watch The Movie
- hdu 3496 Watch The Movie
- hdu 3496 Watch The Movie
- 杭电 hdu 3496 Watch The Movie 二维背包
- hdu 3496 Watch The Movie
- hdu 3496 Watch The Movie(二维01背包)