zoukankan      html  css  js  c++  java
  • 洛谷 P1858 多人背包

    题目描述

    求01背包前k优解的价值和

    输入输出格式

    输入格式:

     

    第一行三个数K、V、N

    接下来每行两个数,表示体积和价值

     

    输出格式:

     

    前k优解的价值和

     

    输入输出样例

    输入样例#1:
    2 10 5
    3 12
    7 20
    2 4
    5 6
    1 1
    输出样例#1:
    57

    说明

    对于100%的数据,Kle 50,Vle 5000,Nle 200K50,V5000,N200

    思路:求01背包的前k优解的模板题。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 210
    using namespace std;
    int K,V,N;
    int ans,cur;
    int f[5010][51];
    int v[MAXN],val[MAXN];
    int main(){
        scanf("%d%d%d",&K,&V,&N);
        for(int i=1;i<=N;i++)
            scanf("%d%d",&v[i],&val[i]);
        for(int i=1;i<=N;i++){
            for(int j=min(V,cur+v[i]);j>=v[i];j--){
                int A[51],B[51];
                for(int kk=1;kk<=K;kk++){
                    A[kk]=f[j-v[i]][kk]||j==v[i]&&kk==1?f[j-v[i]][kk]+val[i]:0;
                    B[kk]=f[j][kk];
                }
                int a=1,b=1,c=1;
                A[K+1]=-1,B[K+1]=-1;
                while(c<=K&&(A[a]!=-1||B[b]!=-1)){
                    if(A[a]>B[b])    f[j][c]=A[a++];
                    else f[j][c]=B[b++];
                    c++;
                }
            }
            cur=min(V,cur+v[i]);
        }
        for(int i=1;i<=K;i++)
            ans+=f[V][i];
        cout<<ans;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    世界疫情可视化开发(一)
    世界疫情可视化开发(三)-- world.jsp
    团队冲刺5
    课下作业1-扩展阅读
    团队冲刺4
    团队冲刺3
    冲刺个人感想
    团队冲刺开始
    Android Studio Toast(吐司)的基本使用
    GridLayout(网格布局)
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7649176.html
Copyright © 2011-2022 走看看