uva 12325 Zombie's Treasure Chest

https://vjudge.net/problem/UVA-12325

 

题意:

一个箱子,体积为N

两种宝物,体积为S1、S2,价值为V1、V2,数量无限

最多装多少价值的宝物

数据范围:2^32

 

完全背包?

NO NO NO

数据范围:2^32

 

分类枚举

如果s比较大,那么某一个最多装n/s个

如果s比较小,

s1个2,体积s1*s2,价值s1*v2
s2个1,体积s2*s1,价值s2*v1

如果s1*v2<s2*v1,那么2物品最多装s1-1个

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
int T;
LL n,s1,v1,s2,v2;
long long ans;
int main()
{
    scanf("%d",&T);
    for(int t=1;t<=T;t++)
    {
        scanf("%lld%lld%lld%lld%lld",&n,&s1,&v1,&s2,&v2);
        ans=0;
        if(s1>s2) swap(s1,s2),swap(v1,v2);
        int maxn;
        if(s2>n/s2) maxn=n/s2;
        else
        {
            if(s1*v2>s2*v1) swap(s1,s2),swap(v1,v2);
            maxn=s1-1;
        }
        for(int i=0;i<=maxn;i++) ans=max(ans,v2*i+(n-s2*i)/s1*v1);
        printf("Case #%d: %lld\n",t,ans);
    } 
}

 

posted @ 2017-08-03 22:42  TRTTG  阅读(277)  评论(0编辑  收藏  举报