这题是一道简单的动态规划,和背包一样一样的
代码
#include<bits/stdc++.h>
using namespace std;
int t,m;
int cnt[100050],val[100050]; //cnt是采这株草所用的时间,val是这株草的价值
int dp[1005][1005]; //常见dp数组
int main()
{
cin>>t>>m;
for(int i=1;i<=m;i++)
{
cin>>cnt[i]>>val[i];
}
for(int i=1;i<=m;i++)
{
for(int j=t;j>=0;j--)
{
if(j>=cnt[i]) //如果背包还有空间装下下一株草
{
dp[i][j]=max(dp[i-1][j-cnt[i]]+val[i],dp[i-1][j]); //更新dp数组
}
else
{
dp[i][j]=dp[i-1][j]; //如果没有空间装下下一株草 就赋值为上一次dp的值
}
}
}
cout<<dp[m][t];
return 0;
}