TOJ3232TOJ礼品兑换

3232: TOJ礼品兑换

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte
总提交: 136            测试通过:91

描述

近期crq老师为了提高各个学生对ACM的兴趣,在TOJ上增加了积分制度和礼品兑换功能, TOJ的积分是来之不易的,固然同学们都想用同一积分换取最大价值的礼品,某同学用了M的积分换取了一些礼品。 请问:他用M的积分最多能换取多少价值的礼品呢? (积分M一定要使用完)

输入

输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数M和N(1<=M<=1000,1<=N<=100),分别表示换取的总积分和礼品的种类,然后是N行数据,每行包含3个数p,h和c(1<=p<=100,0<=h<=200,1<=c<=1000),分别表示每种礼品的价格、对应种类礼品的剩余数目以及每类礼品的消耗的积分。

输出

对于每组测试数据,如果M能使用完请输出"The maximum value is X." ,否则输出"This is impossible.".你可以假设同一类物品能多次换取。每个实例的输出占一行。

样例输入

3
700 3
10 2 100
65 5 500
24 10 200
273 4
57 190 53
51 66 383
92 65 91
61 126 364
273 2
57 190 53
61 126 364

样例输出

The maximum value is 89.
The maximum value is 276.
This is impossible.

题目来源

TOJ

	
#include 
#include 
int main()
{
	int n,i,j,l,m,t,q[1005],p,h,c;
	scanf("%d",&t);
	while(t--)
	{
		memset(q,0,sizeof(q));
		scanf("%d %d",&m,&n);
		while(n--)
		{
			scanf("%d %d %d",&p,&h,&c);
			for(i=0;i=c;j--)
				{
					if(q[c]q[j])
					{
						q[j]=q[j-c]+p;
					}
				}
			}
		}
		if(q[m])
		printf("The maximum value is %d.\n",q[m]);
		else
		printf("This is impossible.\n");
	}
} 


你可能感兴趣的:(TOJ3232TOJ礼品兑换)