vijos1412 多人背包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vijos1412 多人背包相关的知识,希望对你有一定的参考价值。

01背包+归并

看的题解  https://vijos.org/p/1412/solution

#include<cstdio>
#include<cstring>
using namespace std;
int a[205];
int b[205];
int f[5005][55];
int k,n,v;
void work(int *aa,int *bb,int c)
{
    int t[105];
    int ti=1;
    int ai=1;
    int bi=1;
    while(ai+bi<=k+1)
    {
        if(aa[ai]>bb[bi]+c) t[ti++]=aa[ai++];
        else t[ti++]=bb[bi++]+c;
    }
    for(int i=1;i<=k;i++) aa[i]=t[i];
}
int main()
{
    scanf("%d%d%d",&k,&v,&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&a[i],&b[i]);
    }
    for(int i=0;i<=v;i++)
    {
        for(int j=0;j<=k;j++)
            f[i][j]=-1e7;
    }
    f[0][1]=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=v;j>=a[i];j--)
        {
            work(f[j],f[j-a[i]],b[i]);    
        }
    }
    int ans=0;
    for(int i=1;i<=k;i++) ans+=f[v][i];
    printf("%d\n",ans);
    return 0;
}

 

以上是关于vijos1412 多人背包的主要内容,如果未能解决你的问题,请参考以下文章

vijos 1071 01背包+输出路径

vijos 1037 背包+标记

vijos P1426兴奋剂检查 多维费用背包问题的hash

Vijos1392拼拼图的小衫[背包DP|二维信息DP]

题解Vijos1159岳麓山上打水

P1858 多人背包