zoukankan      html  css  js  c++  java
  • 7-11Zombie's Treasure Chest uva12325

    题意  你有一个体积为N的箱子和两种数量无限的宝物  宝物1的体积为s1 价值为v1   宝物2同理

    输入均为32位带符号整数  

    你的任务是计算最多能带走多少价值的宝物 

    暴力枚举:

    首先明白一点      如果s1<s2  则枚举 s2    枚举量为n/s2  更小  

                              如果s1>s2  则枚举s1     枚举量为n/s1 更小

    假如   s1和s2 都很小的时候     这种枚举方式 枚举量就会很大

    此时有一种枚举方式可以将枚举量减少到MAX{s1 s2}

    s2个宝物1 和s1个宝物2的体积相同     假若前者的价值更高    那么宝物二的数量一定小于s1   不然的  假设大于等于s1   那么s1个宝物2可以用s2个宝物1来代换 价值肯定更高  所以枚举量为s1即可

    #include<bits/stdc++.h>
    using  namespace std;
    
    
    typedef long long LL;
    int main()
    {
        int n,v1,s1,v2,s2;
        int cas;
        cin>>cas;
        for(int k=1;k<=cas;k++)
        {
            cin>>n>>s1>>v1>>s2>>v2;
            if(s1>s2)
            {
                swap(s1,s2);
                swap(v1,v2);
            }
            //使得s1<s2;
          LL ans=0;
          if(n/s2>=65536)
            {
                if( s2*v1<s1*v2 )
                  swap(v1,v2),swap(s1,s2);
    
                for(LL i = 0; i <= s1; i++)
                    ans = max(ans, v2*i + (n-s2*i)/s1*v1);
            }
            else
                for(LL i=0;i*s2<=n;i++)
                     ans=max( ans,i*v2+(n-i*s2)/s1*v1) ;
    
            printf("Case #%d: %lld
    ",k,ans);
        }
    }
  • 相关阅读:
    各地电信运营商插广告赚钱,北京联通也不甘落后
    也谈Server Limit DOS的解决方案
    Still Believe
    无奈小虫何
    好朋有也有类别
    无为而治
    青鸟随想
    落寞时分
    网站开发学习路线和资料
    C++实例 添加快捷键表
  • 原文地址:https://www.cnblogs.com/bxd123/p/10411111.html
Copyright © 2011-2022 走看看