可以说是一模一样的01背包
状态表示:f[i][j] 容量为j的背包中装前i个草药的最大价值
状态计算:f [ i ] [ j ] = max( f [ i ] [ j ] , f [ i - 1 ] [ j - t [ i ] ] + v [ i ] )
#include <bits/stdc++.h>
using namespace std;
int T,M;
int v[105],t[105];//v代表价值 t代表时间
int f[105][1005];
int main()
{
cin>>T>>M;
for(int i=1;i<=M;i++)cin>>t[i]>>v[i];
for(int i=1;i<=M;i++)
{
for(int j=0;j<=T;j++)
{
f[i][j]=f[i-1][j];//先不装第i个草药
if(j>=t[i]) f[i][j]=max(f[i][j],f[i-1][j-t[i]]+v[i]);//如果装得下第i个,进行一次比较
}
}
cout<<f[M][T];
return 0;
}