• nyoj860(01变形)


    http://acm.nyist.net/JudgeOnline/problem.php?pid=860

    又见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
    由于W最大值过大,无法开到这么大的数组,只好换种思路;
    不难发现价值最大就是1w,所以我们不妨从价值入手,计算价值一定时候的最小重量,最后枚举一遍找到符合题意的答案;
    dp[i]:当价值为i时最小的物品总重量

    #include<iostream>
    #include<cstring>
    using namespace std;
    #define inf 0x3f3f3f3f
    int dp[10005]; //dp[i],价值为i时的最小重量
    int main()
    {
    int n,W,i,j,k;
    int w,p;
    while(cin>>n>>W){
    memset(dp,inf,sizeof(dp)),dp[0]=0;
    for(i=1;i<=n;++i) {cin>>w>>p;
    for(j=10000;j>=p;--j) dp[j]=min(dp[j],dp[j-p]+w);
    }
    for(i=10000;i>=0;--i) if(dp[i]!=inf&&dp[i]<=W) {cout<<i<<endl;break;}
    }
    return 0;
    }

  • 相关阅读:
    opencv ImportError: libSM.so.6: cannot open shared object file: No such file or directory
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcd
    Linux卸载并更新显卡驱动
    人脸识别
    dav转mp4
    python调用c++接口,参数为opencv读取数据
    Linux下内存泄漏工具valgrind
    模型轻量化
    自动驾驶车搭建
    TSN(Temporal Segment Networks)
  • 原文地址:https://www.cnblogs.com/zzqc/p/6617216.html
Copyright © 2020-2023  润新知