# [置顶] 0-1背包 动态规划

2209人阅读 评论(0)

Pi=[{i,i+1,.......,n},Ci=C1ki1wkxk]$P_i=[\{i,i+1,.......,n\},C_i=C-\sum _{1 \le k \le i-1}w_kx_k ]$

Si=(yi,yi+1,...,yn)yi{0,1}$S_i=(y_i,y_{i+1},...,y_n)，其中y_i \in \{0,1\}$，是背包问题Pi=[{i,i+1,.......,n},Ci=C1ki1wkxk]$P_i=[\{i,i+1,.......,n\},C_i=C-\sum _{1 \le k \le i-1}w_kx_k ]$的优化解，那么其子问题Si+1=(yi+1,yi+2,...,yn)yi{0,1}$S_{i+1}=(y_i+1,y_{i+2},...,y_n)，y_i \in \{0,1\}$，是背包问题Pi+1=[{i+1,i+2,.......,n},Ci+1=C1kiwkxk]$P_{i+1}=[\{i+1,i+2,.......,n\},C_{i+1}=C-\sum _{1 \le k \le i}w_kx_k ]$的优化解。

{4,........,n},Cw3$\{4,........,n\},C-w_3$表示没有选择物品1、2、选择了物品三。

{4,........,n},Cw1w2$\{4,........,n\},C-w_1-w_2$表示选择了物品1、2，没有选择物品三。

{4,........,n},Cw1$\{4,........,n\},C-w_1$表示选择了物品1，没有选择物品2、3。

[{i,i+1,......,n},j]$[\{i,i+1,......,n\},j]$

0j<wi,m(i,j)=m(i+1,j)$\color{red}{0 \le j \lt w_i,}\color{blue}{m(i,j)=m(i+1,j)}$

j>wi,m(i,j)=max{m(i+1,j),m(i+1,jwi)+vi}$\color{red}{j \gt w_i,}\color{blue}{m(i,j)=max\{m(i+1,j),m(i+1,j-w_i)+v_i\}}$

[{n},j]$[\{n\},j]$
0j<wi,m(n,j)=0$\color{red}{0 \le j \lt w_i,}\color{blue}{m(n,j)=0}$

j>wi,m(n,j)=vn$\color{red}{j \gt w_i,}\color{blue}{m(n,j)=v_n}$

wi1<C$w_i-1 \lt C$
//初始已知值
For j=0$j=0$ To wn1$w_n-1$ Do
m[n,j]=0;$\qquad m[n,j]=0;$

For j=wn$j=w_n$ To C$C$ Do
m[n,j]=vn;$\qquad m[n,j]=v_n;$

For i=n1$i=n-1$ To 2$2$ Do
$\qquad$For j=0$j=0$ To wi1$w_i-1$ Do
m[i,j]=m[i+1,j]$\qquad \qquad m[i,j]=m[i+1,j]$

$\qquad$For j=wi$j=w_i$ To C$C$ Do
m[i,j]=max{m(i+1,j),m(i+1,jwi)+vi};$\qquad\qquad m[i,j]=max\{m(i+1,j),m(i+1,j-w_i)+v_i\};$

IF C<w1$C \lt w_1$ Then m[1,C]=m[2,C];$m[1,C]=m[2,C];$
Elsem[1,C]=max{m[2,C],m[2,Cw1]+v1};$\qquad \qquad Else \; m[1,C]=max\{m[2,C],m[2,C-w_1]+v_1\};$

For j=0$j=0$ To min(wn1,C)$min(w_n-1,C)$ Do
m[n,j]=0;$\qquad m[n,j]=0;$

For j=wn+1$j=w_n+1$ To C$C$ Do
m[n,j]=vn;$\qquad m[n,j]=v_n;$

For i=n1$i=n-1$ To 2$2$ Do
$\qquad$For j=0$j=0$ To min(wn1,C)$min(w_n-1,C)$ Do
m[i,j]=m[i+1,j]$\qquad \qquad m[i,j]=m[i+1,j]$

$\qquad$For j=wi$j=w_i$ To C$C$ Do
m[i,j]=max{m(i+1,j),m(i+1,jwi)+vi};$\qquad\qquad m[i,j]=max\{m(i+1,j),m(i+1,j-w_i)+v_i\};$

IF C<w1$C \lt w_1$ Then m[1,C]=m[2,C];$m[1,C]=m[2,C];$
Elsem[1,C]=max{m[2,C],m[2,Cw1]+v1};$\qquad \qquad Else \; m[1,C]=max\{m[2,C],m[2,C-w_1]+v_1\};$

1
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：81473次
• 积分：1532
• 等级：
• 排名：千里之外
• 原创：72篇
• 转载：2篇
• 译文：0篇
• 评论：8条
博客专栏
 算法设计与计算复杂性 文章：10篇 阅读：14047
 java web从零单排 文章：11篇 阅读：8356
评论排行
最新评论