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;
    }
  • 相关阅读:
    <把时间当做朋友>读书笔记
    C语言-第12课
    C语言-第13课
    C语言-第11课
    python-第三课-字符串详解
    C语言-第10课
    C语言-第9课
    C语言-第8课
    C语言-第7课-enum和typedef分析
    C语言-第6课
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11873168.html
Copyright © 2011-2022 走看看