背包问题是一个经典的动态规划模型。现将我理解的写出来。
1、01背包问题
题目:有N件物品和一个容量为V的背包。第i件物品的价值是c[i],重量是w[i]。求解将哪些物品装入背包可使价值总和最大。
基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即f[i][v]表示前i件物品恰好放入一个容量为V的背包可以获得的最大价值,其状态转移方程便是:
f[i][v] = max{f[i-1][v],f[i-1][v-w[i] + c[i]];
对于一个物品,只有来那个中情况:
1:第i件不放进去,这时所得价值:f[][i-1][v]
2:第i件放进去,这时所得价值:f[i-1][v-w[i]] + c[i]