nyoj 311 完全背包

点击打开题目链接


完全背包,物品无限件


#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int main()
{
	int n,m,v,i,j,d[50005],a,b;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&m,&v);
		memset(d,-100,sizeof(d));
		d[0]=0; //初始值赋 0 
		for(i=0;i<m;i++)
		{
			scanf("%d%d",&a,&b);
			for(j=a;j<=v;j++)
				d[j]=max(d[j-a]+b,d[j]); //d[j]=d[j-ka]+kb,当j-ka=0,k为整数时单件物品成立 
		}								//v除以任意(>=1)个ai的和余数为0多件(单件)物品成立 
		if(d[v]<0) printf("NO\n");
		else printf("%d\n",d[v]);
	}
	return 0;
}        

你可能感兴趣的:(nyoj 311 完全背包)