题面
题目类型
01 背包问题
思路
用 表示在前 i 个物品中有 j 容量背包未使用时的最大价值,
表示采摘第
株草药的时间和这株草药的价值。
状态转移方程:
:采摘第
株草药。
:不采摘第
株草药。
代码
#include<bits/stdc++.h>
using namespace std;
long long a[105][1005],w[105],v[105];
int main()
{
/*输入*/
long long t,m;
cin>>t>>m;
for (long long i=1;i<=n;i++) cin>>w[i]>>v[i];
/*状态转移*/
for (long long i=1;i<=n;i++)
{
for (long long j=0;j<=m;j++)
{
if (j>=w[i]) //判断是否有足够时间采摘
{
a[i][j]=max(a[i-1][j],a[i-1][j-w[i]]+v[i]);
}
else //无法采摘
{
a[i][j]=a[i-1][j];
}
}
}
cout<<a[n][m];
return 0;
}
时间复杂度:
空间复杂度: