zoukankan      html  css  js  c++  java
  • AcWing 2. 01背包问题

    朴素

    //朴素二维
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int N = 1010;
    int n, m;
    int v[N], w[N];
    int f[N][N];
    int main() {
        cin >> n >> m;
        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][j]分为f[i-1][j](去掉第i个)和 f[i-1][j-v[i]]+w[i](先去掉第i个,并减去他的质量,再加上) 
                f[i][j]=f[i-1][j];//左边
                //右边 
                //当j<v[i]时,情况不存在,就不用考虑 
                if(j>=v[i]) f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
            }
        cout<<f[n][m]<<endl;
        return 0;
    }

    优化

    //一维优化
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int N = 1010;
    int n, m;
    int v[N], w[N];
    int f[N];
    int main() {
        cin >> m >> n;//m表示时间,n表示数量
        for (int i = 1; i <= n; i ++ ) cin >> v[i] >> w[i];
        for (int i = 1; i <= n; i ++ )
            for (int j = m; j >= v[i]; j -- )
                f[j] = max(f[j], f[j - v[i]] + w[i]);
        cout << f[m];
        return 0;
    }
  • 相关阅读:
    济南学习 Day5 T3 晚
    Codevs 1043 ==洛谷 P1004 方格取数
    济南学习 Day 5 T2 晚
    济南学习 Day 5 T1 晚
    济南学习 Day 5 T3 am
    济南学习 Day 5 T2 am
    LeetCode Weekly Contest 8
    poj-1410 Intersection
    leetcode-Warm Up Contest-Aug.21
    poj-1384 Piggy-Bank
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11873168.html
Copyright © 2011-2022 走看看