zoukankan      html  css  js  c++  java
  • 51nod 1086

    https://www.cnblogs.com/TnT2333333/p/6879709.html

    二进制优化多重背包

    怎么用二进制优化多重背包,举一个例子就明白了。

    如果要放n个苹果,可以将n个苹果分成几个2的次方1,2,3,4,m^2然后n可以由这些按照某种组合来组合。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    const int M = 1e5 + 10;
    int wi[110] , p[110] , c[110] , dp[M];
    int main() {
        int n , w;
        scanf("%d%d" , &n , &w);
        for(int i = 1 ; i <= n ; i++) {
            scanf("%d%d%d" , &wi[i] , &p[i] , &c[i]);
        }
        memset(dp , 0 , sizeof(dp));
        for(int i = 1 ; i <= n ; i++) {
            int d1 = 1 , d2 = c[i];
            while(d1 < d2) {
                for(int j = w ; j >= d1 * wi[i] ; j--) {
                    dp[j] = max(dp[j] , dp[j - d1 * wi[i]] + d1 * p[i]);
                }
                d2 -= d1;
                d1 *= 2;
            }
            for(int j = w ; j >= d2 * wi[i] ; j--) {
                dp[j] = max(dp[j] , dp[j - d2 * wi[i]] + d2 * p[i]);
            }
        }
        printf("%d
    " , dp[w]);
        return 0;
    }
  • 相关阅读:
    网络资源(4)
    网络资源(3)
    网络资源(2)
    网络资源(1)
    OCP读书笔记(27)
    OCP读书笔记(26)
    OCP读书笔记(25)
    OCP读书笔记(24)
    OCP读书笔记(23)
    OCP读书笔记(22)
  • 原文地址:https://www.cnblogs.com/shandongs1/p/9445246.html
Copyright © 2011-2022 走看看