• nyoj860--又见01背包**************


    又见01背包

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
        有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W 
    的物品,求所有挑选方案中物品价值总和的最大值。
      1 <= n <=100
      1 <= wi <= 10^7
      1 <= vi <= 100
      1 <= W <= 10^9
     
    输入
    多组测试数据。
    每组测试数据第一行输入,n 和 W ,接下来有n行,每行输入两个数,代表第i个物品的wi 和 vi。
    输出
    满足题意的最大价值,每组测试数据占一行。
    样例输入
    4 5
    2 3
    1 2
    3 4
    2 2
    样例输出
    7
    来源
    飘谊系列
    上传者
    TC_张友谊
    W太大, 数组会爆, 考虑价值一定时, 求获得当前价值的最小体积, 最后加一个判断。
    #include <cstdio>
    #include <cmath>
    #define N 101
    #define min(a,b) ((a)<(b)?(a):(b))
    const int MAXN = 1e9+1; 
    int wei[N], val[N], dp[N*N];
    int main(){
        int n, m;
        while(scanf("%d%d", &n, &m) != EOF){
            int sum = 0;
            for(int i = 1; i <= n; i++){
                scanf("%d%d", &wei[i], &val[i]);
                sum += val[i];
            }
            for(int i = 1; i <= sum; i++)
                dp[i] = MAXN;
            dp[0] = 0;
            for(int i = 1; i <= n; i++)
                for(int w = sum; w >= val[i]; w--)
                    dp[w]=min(dp[w], dp[w-val[i]]+wei[i]);
            for(int i = sum; i >= 0; i--)
                 if(dp[i] <= m){
                    printf("%d
    ", i); 
                    break;
                }
        }
        return 0;
    }
  • 相关阅读:
    Gentle.Net学习笔记一:配置文件设置
    啥时候咱能用上NExcelApi?
    ibus no input window
    QT && GDAL
    安装 purcell 的emacs.d 配置文件
    进程
    C++的cout高阶格式化操作
    C++ 虚函数表解析
    [转]C程序内存区域分配(5个段作用)
    如何写Makefile文件
  • 原文地址:https://www.cnblogs.com/soTired/p/5084981.html
Copyright © 2020-2023  润新知