背包所求体积类型总结
体积不超过j: 全部体积为0, 推导过程中 v >= 0;
体积恰好为j:f[0] = 0, f[i] = 取不到, v >= 0;
体积至少为j: f[0] = 0, f[i] = 取不到, v = max(0, j - vi);
完成的题目
Acwing 1977.信息中继
AcWing 1968.奶牛赛跑
AcWing 1020.潜水员
AcWing 12.背包问题求具体方案
AcWing 11.背包问题求方案数
01背包模板(O(nv)的时间复杂度)
#include<iostream>
using namespace std;
const int N = 1010;
int dp[N][N];
int n,v;
int main()
{
cin>>n>>v;
for(int i = 1;i <= n;i++)
{
int c,w;
cin>>c>>w;
for(int j = 1;j <= v;j++)
{
if(j >= c)//选择
{
dp[i][j] = max(dp[i-1][j],dp[i-1][j-c]+w);
}else
{
dp[i][j] = dp[i-1][j];
}
}
}
cout<<dp[n][v];
return 0;
}
本文总结了背包问题的多种求解方法,包括01背包的O(nv)模板,并详细解释了不同情况下的体积决策:体积上限、特定体积和至少体积。通过实例演示了如何使用动态规划求解背包问题的最优解及方案数。
664

被折叠的 条评论
为什么被折叠?



