按步骤来
step1:定义状态表示 f[i][j]表示从1到i个草药里选出采摘时间不超过j的最大价值
step2:推导状态转移方程
step3 初始化,全部初始化为0
step4:结果,结果就在f[n][m]
代码
#include <iostream>
using namespace std;
const int N = 1e4+10,M = 1e7+10;
typedef long long ll;
ll t[N],w[N];
ll f[M];
int n,m;
int main()
{
cin >>m >> n;
for(int i = 1;i<=n;i++)
{
cin >> t[i] >> w[i];
}
for(int i = 1;i<=n;i++)
{
for(int j = t[i];j<=m;j++)
{
f[j] = max(f[j],f[j-t[i]]+w[i]);
}
}
cout << f[m];
return 0;
}