http://acm.hdu.edu.cn/showproblem.php?pid=2191
哈哈,这是我自己差不多想出来的
我的代码:
#include <iostream>
#include <cstdio>
#include<cstring>
using namespace std;
int w[105];
double v[105];
double dp[100005];
int max(int a,int b)//这些可以不写的
{
if(a>b)
return a;
else
return b;
}
int main()
{
int c,n,m;
int p[105],h[105],t[105];
int f[105],i,j;
cin>>c;
while(c--)
{
cin>>n>>m;
memset(f,0,sizeof(f));
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&p[i],&h[i],&t[i]);//价格。重量。袋数
}
for(i=1;i<=m;i++)
{
for(j=1;j<=t[i];j++)
{
for(int k=n;k>=p[i];k--) //这是对同种大米有几袋米做循环,转化为01背包。
{
f[k]=max(f[k],f[k-p[i]]+h[i]);
}
}
}
printf("%d\n",f[n]);
}
return 0;
}