您的位置:首页 > 其它

hdu3496(二维背包问题)

2015-08-24 15:38 246 查看
题意:在N张CD中选M张出来,且选中CD播放时间总和不超过L。使喜欢度总和最大。

分析:简单二维01背包

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
int dp[102][1002];
int main(){
int T;scanf("%d",&T);
while(T--){
int N,M,L;scanf("%d%d%d",&N,&M,&L);
memset(dp,-1,sizeof(dp));
for(int i=0;i<=L;i++) dp[0][i]=0;
for(int i=0;i<N;i++) {
int time,value;
scanf("%d%d",&time,&value);
for(int j=M;j>=1;j--)
for(int k=L;k>=time;k--)
dp[j][k]=max(dp[j][k],dp[j-1][k-time]+value);
}//for
if(dp[M][L]<0) printf("0\n");
else printf("%d\n",dp[M][L]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: