題目鏈接
http://acm.split.hdu.edu.cn/showproblem.php?pid=5410
Problem Description Today is CRB's birthday. His mom decided to buy many presents for her lovely son.
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#define eps 1e-8
#define maxn 105
#define inf 0x3f3f3f3f3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;
int dp[2005];
int vis[2005][1005];
int kind[1005][3];
int main()
{
int T;
int M,N;
cin>>T;
while(T--)
{
scanf("%d%d",&M,&N);
for(int i=0;i<N;i++)
scanf("%d%d%d",&kind[i][0],&kind[i][1],&kind[i][2]);
memset(dp,0,sizeof(dp));
memset(vis,0,sizeof(vis));
for(int i=1;i<=M;i++)
{
int flag=-1;
for(int j=0;j<N;j++)
{
if(i<kind[j][0]) continue;
int s=dp[i-kind[j][0]]+kind[j][1];
if(!vis[i-kind[j][0]][j]) s+=kind[j][2];
if(dp[i]<s)
{
dp[i]=s;
flag=j;
}
}
if(flag>=0)
{
for(int j=0;j<N;j++)
{
vis[i][j]=vis[i-kind[flag][0]][j];
}
vis[i][flag]++;
}
}
int tmp=0;
for(int i=1;i<=M;i++)
tmp=max(tmp,dp[i]);
printf("%d\n",tmp);
}
return 0;
}