01背包总结


设定:物品n个 体积m 第i个体积v[i] 价值w[i]


1.dp[i][j] 代表选到第i个 体积不超过j时 的最大价值
初始化:
  二维:dp[i][j] = 0; 范围 1<=i<=n,1<=j<=m;
  一维:dp[j] = 0; 范围 1<=j<=m;
状态转移方程:
  不选第i个,总价值=在体积为j时选1~i-1个时的最大值;
  dp[i][j] = dp[i-1][j];
  选第i个, 总价值=第i个价值+在剩下的体积里选1~i-1个时的最大价值。
  dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]);
  二维:可选情况下 dp[i][j] = max(dp[i-1][j],dp[i-1][j-v[i]]+w[i])
  一维:dp[j] = max(dp[j],dp[j-v[i]]+w[i]);
答案:dp[n][m] 或 dp[m] 就代表了答案

 

2.dp[i][j] 代表选到第i个 体积不超过j时 的方案数
初始化:
  二维:dp[0][0]=1;
  一维:dp[0]=1;
状态转移方程:
  选:f[i][j] += f[i - 1][j - v[i]];
  不选:f[i][j] = f[i - 1][j];
  二维:f[i][j] += f[i - 1][j - v[i]];
  一维: f[j] += f[j - v];
答案:dp[n][m]/dp[m];


3.dp[i][j] 代表选到第i个 体积至少j时 的最小价值
初始化:
  二维:dp[0][0]= 0,dp[0][j]=0x3f3f3f3f(j>=1);
  一维:dp[0]=0,dp[1~m]=0x3f3f3f;
状态转移方程:
  二维:dp[i][j]=min(dp[i-1][j],dp[i-1][max(j-v[i],0)]+w[i])
  一维:dp[j]=min(dp[j],dp[max(j-v[i],0)]+w[i])
答案:dp[n][m]/dp[m];

 

4.dp[i][j] 代表选到第i个 体积至少j时 的方案数
初始化 :
  二维:dp[0][0]=1;
  一维:dp[0]=1;
状态转移方程:
  二维:dp[i][j] = dp[i - 1][j] + dp[i - 1][max(0, j - v)];
  一维:dp[j] += dp[max(0, j - v)];
答案:dp[n][m]/dp[m];


5.dp[i][j] 代表选到第i个 体积恰好j时 的最大价值
初始化:
  二维:dp[0][0]=0,dp[0][j]=-0x3f3f3f3f(j>=1);
  一维:dp[0]=0,dp[j]=-0x3f3f3f3f(j>=1);
状态转移方程:
  选:dp[i][j] = max(dp[i][j], dp[i - 1][j - v] + w);
  不选:dp[i][j] = dp[i - 1][j];
  二维:dp[i][j] = max(dp[i][j], dp[i - 1][j - v] + w);
  一维: dp[j] = max(dp[j], dp[j - v] + w);
答案:dp[n][m]/dp[m];


6.dp[i][j] 代表选到第i个 体积恰好j时 的最小价值
初始化:
  二维:dp[0][0]=0,dp[0][j]=0x3f3f3f3f(j>=1);
  一维:dp[0]=0,dp[1~m]=0x3f3f3f3f;
状态转移方程:
  二维:dp[i][j]=min(dp[i-1][j],dp[i-1][j-v]+w);
  一维:dp[j]=min(dp[j],dp[j-v]+w);
答案:dp[n][m]/dp[m];

 

 

7.dp[i][j] 代表选到第i个 体积恰好j时 的方案数
初始化:
  一维:dp[0][0]=1;
  二维:dp[0]=1;
状态转移方程:
  选:dp[i-1][j-v[i]];
  不选:dp[i-1][j];
  二维: dp[i][j]=dp[i-1][j-v[i]]+dp[i-1][j];
  一维: dp[j]=dp[j]+dp[j-v[i]];
答案:dp[n][m]/dp[m];

posted @   方方土333  阅读(8)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示