zoukankan      html  css  js  c++  java
  • 51 Nod 1086 多重背包问题(单调队列优化)

    1086 背包问题 V2 

    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

     收藏

     关注

    有N种物品,每种物品的数量为C1,C2......Cn。从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数)。求背包能够容纳的最大价值。

    Input

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

    Output

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

    Input示例

    3 6
    2 2 5
    3 3 8
    1 4 1

    Output示例

    9
    
    #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 v[105];//价值
    int cnt[105];//数量
    int dp[50005];
    int deq[50005];//双端队列(保存数组下标)
    int deqv[50005];//双端队列(保存值)
    void solve()
    {
        for(int i=1;i<=n;i++){
            for(int a=0;a<w[i];a++){
                int s=0,t=0;//双端队列的头部和尾部
                for(int j=0;j*w[i]+a<=W;j++){
                    int val=dp[j*w[i]+a]-j*v[i];
                    while(s<t&&deqv[t-1]<=val)t--;
                    deq[t]=j;
                    deqv[t++]=val;
                    dp[j*w[i]+a]=deqv[s]+j*v[i];
                    if(deq[s]==j-cnt[i]){
                        s++;
                    }
                }
            }
        }
    }
    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%d",&w[i],&v[i],&cnt[i]);
        solve();
        printf("%d
    ",dp[W]);
        return 0;
    }
    
    
    
    
    
  • 相关阅读:
    HDU 5795
    HDU5783
    HDU 5791
    VK Cup 2016
    Codeforces Round #357 (Div. 2)
    Educational Codeforces Round 15
    HDU5724
    博弈学习 3
    Spring的多配置文件加载
    spring 核心技术
  • 原文地址:https://www.cnblogs.com/linruier/p/9588291.html
Copyright © 2011-2022 走看看