现在的位置: 首页 > 综合 > 正文

hdu3496

2013年10月01日 ⁄ 综合 ⁄ 共 586字 ⁄ 字号 评论关闭

/*
分析:
    二维背包的简单题。

                               2012-07-18
*/

#include"stdio.h"
#include"string.h"


struct A
{
	int price;
	int val;
}E[111];


int max(int a,int b)
{
	return a>b?a:b;
}


int main()
{
	int T;
	int n,m,L;
	int i,l,j;
	int dp[111][1011];


	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d%d",&n,&m,&L);
		for(i=1;i<=n;i++)	scanf("%d%d",&E[i].price,&E[i].val);


		memset(dp,-1,sizeof(dp));
		for(j=0;j<=L;j++)	dp[0][j]=0;


		for(i=1;i<=n;i++)
		{
			for(l=m;l>=1;l--)                        //从大到小
			{
				for(j=L;j>=E[i].price;j--)           //从大到小
				{
					if(dp[l-1][j-E[i].price]==-1)	break;
					dp[l][j]=max(dp[l][j],dp[l-1][j-E[i].price]+E[i].val);
				}
			}
		}


		if(dp[m][L]==-1)	printf("0\n");
		else				printf("%d\n",dp[m][L]);
	}
	return 0;
}

抱歉!评论已关闭.