zoukankan      html  css  js  c++  java
  • nyoj 860 又见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

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int dp[10005];
    int w[105],v[105];
    int main()
    {
    	int n,m,sum;
    	while(scanf("%d%d",&n,&m)!=EOF)
    	{
    		sum=0;
    		for(int i=1;i<=n;i++)
    		{
    			scanf("%d %d",&w[i],&v[i]);
    			sum+=v[i];
    		}
    		memset(dp,100,sizeof(dp));
    		dp[0]=0;
    		for(int i=1;i<=n;i++)
    			for(int j=sum;j>=v[i];j--)
    				dp[j]=min(dp[j],dp[j-v[i]]+w[i]);
    		for(int i = sum; i >=0; i --)  
                if(dp[i]<= m)
    			{  
                    printf("%d
    ", i);  
                    break;  
                } 
    	}
    	return 0;
    }        
    

      

  • 相关阅读:
    Python装饰器
    Python常用内建模块
    Python文件的操作
    Python集合的操作
    Python字典的操作
    Python列表元组的操作
    os.path
    Python字符串的操作
    线性回归
    随机森林
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7057713.html
Copyright © 2011-2022 走看看