您的位置:首页 > 其它

HDOJ 3496 Watch The Movie

2013-07-24 16:50 246 查看
本题为二维费用背包。注意事项在代码中

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
#define PINF 0x7FFFFFFF
#define NINF -0x7FFFFFFF
int n,m,l;
int val[105],cost[105],r[105][1005];
int main()
{
int i,j,t,k,ma;
scanf("%d",&t);
while(t--)
{
ma=0;
memset(r,-1,sizeof(r));//注意赋值
scanf("%d%d%d",&n,&m,&l);
for(i=0;i<n;i++)
scanf("%d%d",&cost[i],&val[i]);
r[0][0]=0;
for(i=0;i<n;i++)
{
for(k=l;k>=cost[i];k--)
for(j=m;j>=1;j--)//降序
{
if(r[j-1][k-cost[i]]!=-1)//注意条件
r[j][k]=max(r[j][k],r[j-1][k-cost[i]]+val[i]);
}
}
for(j=0;j<=l;j++)
if(r[m][j]>ma)ma=r[m][j];//在r[m][l]=-1时并不表示看不完m部电影。
printf("%d\n",ma);
}
return 0;
}






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: