码迷,mamicode.com
首页 > 其他好文 > 详细

vijos1412 多人背包

时间:2017-07-14 10:16:08      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:log   else   work   oid   bsp   space   while   printf   style   

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 多人背包

标签:log   else   work   oid   bsp   space   while   printf   style   

原文地址:http://www.cnblogs.com/abc3288288351/p/7164057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!