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;
    }
    
    
    
    
    
  • 相关阅读:
    Vijos / 题库 / 输油管道问题
    军事机密(Secret.pas)
    1164 统计数字
    1142 奖学金 sort做法
    1487 大批整数排序
    1487 大批整数排序
    1545 最简单排序
    1470 数列处理
    1683 车厢重组
    spin.js无图片实现loading进度条,支持但非依赖jquery
  • 原文地址:https://www.cnblogs.com/linruier/p/9588291.html
Copyright © 2011-2022 走看看