算法
(DP,背包问题) O(nm)
经典01背包问题。
采药总时间相当于背包容量,
每一株药相当于一件物品,
采药时间相当于该物品的体积,
草药的价值相当于物品价值。
时间复杂度
01背包问题的时间复杂度 等于 物品数量 × 背包容量,因此本题的时间复杂度是 O(nm)
。
本题使用一维优化01背包
#include<bits/stdc++.h>
using namespace std;
int t, m;
const int N = 1010;
int v, w;
int dp[N];
int main()
{
cin>>t>>m;
for(int i=1;i<=m;++i)
{
cin>>v>>w;
for(int j=t;j>=v;--j) dp[j] = max(dp[j], dp[j-v]+w);
}
cout<<dp[t]<<endl;
return 0;
}