zoukankan      html  css  js  c++  java
  • 51 Nod 1085 01背包问题

    1085 背包问题 

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

     收藏

     关注

    在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。

    Input

    第1行,2个整数,N和W中间用空格隔开。N为物品的数量,W为背包的容量。(1 <= N <= 100,1 <= W <= 10000)
    第2 - N + 1行,每行2个整数,Wi和Pi,分别是物品的体积和物品的价值。(1 <= Wi, Pi <= 10000)

    Output

    输出可以容纳的最大价值。

    Input示例

    3 6
    2 5
    3 8
    4 9

    Output示例

    14
    #include<bits/stdc++.h>
    #include<stdio.h>
    #include<iostream>
    #include<cmath>
    #include<math.h>
    #include<queue>
    #include<set>
    #include<map>
    #include<iomanip>
    #include<algorithm>
    #include<stack>
    #define inf 0x3f3f3f3f
    using namespace std;
    typedef long long ll;
    int n,W;
    int w[105];
    int p[105];
    int dp[10005];
    int main()
    {
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif // ONLIN
        scanf("%d%d",&n,&W);
        for(int i=1;i<=n;i++)scanf("%d%d",&w[i],&p[i]);
        for(int i=1;i<=n;i++)
        {
            for(int j=W;j>=0;j--)//为了防止一个物品被放入多次,须逆序进行
            {
                if(j>=w[i])
                dp[j]=max(dp[j],dp[j-w[i]]+p[i]);
            }
        }
        printf("%d
    ",dp[W]);
        return 0;
    }
    
  • 相关阅读:
    4.比赛F
    4.M
    4.H
    4.J
    4.G
    4.D
    4.C
    UVA 215 Spreadsheet Calculator (模拟)
    POJ 3469 Dual Core CPU(最小割模型的建立)
    POJ 3281 Dining(网络流最大匹配)
  • 原文地址:https://www.cnblogs.com/linruier/p/9588293.html
Copyright © 2011-2022 走看看