zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Java关键字instanceof
    java中equals和==的区别
    Servlet、Filter、Listener总结
    struts2 拦截器配置
    Struts2技术详解
    构建Java并发模型框架
    基于MINA框架快速开发网络应用程序
    Spring的IOC原理
    Spring AOP原理及拦截器
    JAVA三大框架SSH和MVC
  • 原文地址:https://www.cnblogs.com/zzqc/p/6617216.html
Copyright © 2011-2022 走看看