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

第k优解 hdu 2639

时间:2016-06-05 17:06:40      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
using namespace std;
int w[110],v[110],f[1010][110],a[110],b[110];
//f[j][k]表示重量为j时的第k优解 
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m,i,j,k,l;
        scanf("%d%d%d",&n,&m,&k);
        for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
        for(i=1;i<=n;i++)
        scanf("%d",&w[i]);
        memset(f,0,sizeof(f));
        for(i=1;i<=n;i++)
        {
            for(j=m;j>=w[i];j--)
            {
                for(l=1;l<=k;l++)
                {
                    a[l]=f[j-w[i]][l]+v[i];
                    b[l]=f[j][l];
                }
                //f[v]这个有序队列是由f[v]和f[v-c[i]]+w[i]这两个有序队列得到 
                a[k+1]=b[k+1]=-1;
                int x=1,y=1,z=1;
                while(z<=k&&(a[x]!=-1||b[y]!=-1))
                {
                    if(a[x]>b[y])
                    {
                        f[j][z]=a[x];
                        x++;
                    }
                    else
                    {
                        f[j][z]=b[y];
                        y++;
                    }
                    if(f[j][z]!=f[j][z-1])//去重 
                    z++;
                }
            }
        }
        printf("%d\n",f[m][k]);
    }
    return 0;
}

 

第k优解 hdu 2639

标签:

原文地址:http://www.cnblogs.com/dingmenghao/p/5561064.html

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