滚动数组用法

滚动数组

对于只用到相邻两层关系的运算,可以用 0 , 1 表示他们的相对关系 对于只用到相邻两层关系的运算,可以用0,1表示他们的相对关系 对于只用到相邻两层关系的运算,可以用01表示他们的相对关系
即当前这一层表示为 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;
}

猜你喜欢

转载自blog.csdn.net/qq_63092029/article/details/130018896
今日推荐