二维背包
二维背包相较于01背包,多了一个限制,就是背包的重量有了限制,但是其本质和01背包并没有什么区别,只是多遍历一轮。
f(i,j,k)状态表示:解锁了前i个物品,背包可以承载体积为j,可以承重为w。
状态转移方程:f(i,j,k)=max( f(i-1,j,k),f(i-1,j-v,k-w)+vi) )
本质和01背包转移方程一致,区分为拿第i种物品,和不拿第i种物品,转移的状态一定是最近的关系,这样才能保证每种状态下都是最优解。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1010;
int n,V,M;
int f[N][110][110];
int main() {
cin>>n>>V>>M;//输入物品个数,背包容积, 可承受最大重量
for(