题目:​​http://acm.hdu.edu.cn/showproblem.php?pid=2191​

#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 101
class Point
{
public:
int price;
int height;
int cnum;
};
Point point[MAX];
int casen;
int n;int m;
int result[MAX];
int main()
{
scanf("%d",&casen);
while(casen--)
{
scanf("%d %d",&n,&m);
int i=0;
for(i=0;i<m;i++)
{
scanf("%d %d %d",&point[i].price,&point[i].height,&point[i].cnum);
}
for(i=0;i<MAX;i++)
{
result[i]=0;
}
int limit=n;
int j;int k=0;
for(i=0;i<m;i++)//选择买第i种大米
{
for(j=0;j<point[i].cnum;j++)//选择买j袋
{
//如果说买k袋大米比买k+1袋大米优
for(k=limit;k>=point[i].price;k--)
{
if(result[k] < result[k-point[i].price]+point[i].height)
{
result[k]=result[k-point[i].price]+point[i].height;
}
}
}
}
printf("%d\n",result[limit]);
}
return 0;
}