滚动数组
对于只用到相邻两层关系的运算,可以用 0 , 1 表示他们的相对关系 对于只用到相邻两层关系的运算,可以用0,1表示他们的相对关系 对于只用到相邻两层关系的运算,可以用0,1表示他们的相对关系
即当前这一层表示为 0 ,那么上一层就表示为 1 ,这个可以用按位与来实现 即当前这一层表示为0,那么上一层就表示为1,这个可以用按位与来实现 即当前这一层表示为0,那么上一层就表示为1,这个可以用按位与来实现
举一个 01 背包的例子 举一个01背包的例子 举一个01背包的例子
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int f[2][N];
int v[N], w[N];
int n, m;
int main()
{
cin >> m >> n;
for(int i = 1; i <= n; i ++)
{
cin >> v[i] >> w[i];
}
for(int i = 1; i <= n; i ++)
{
for(int j = 0; j <= m; j ++)
{
f[i&1][j] = f[i-1&1][j];
if(j >= v[i])
{
f[i&1][j] = max(f[i&1][j], f[i-1&1][j-v[i]]+w[i]);
}
}
}
cout << f[n&1][m] << endl;
return 0;
}