zoukankan      html  css  js  c++  java
  • Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)

    题意:

    你有一个体积为N的箱子和两种数量无限的宝物。宝物1的体积为S1,价值为V1;宝物2的体积为S2,价值为V2。输入均为32位带符号的整数。你的任务是最多能装多少价值的宝物?

    分析:

    分类枚举, 取两者体积的最小公倍数, 看看在同体积不同数量的两种物品哪个价值大, 价值小的一定不会拿超过这个数目。

    #include<cstdio>
    #include<iostream>
    #include<vector>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int main(){
    //    freopen("1.txt","r", stdin);
    //    freopen("2.txt","w", stdout);
        long long t;
        cin >> t;
        long long kase = 1;
        while(t--){
            long long n, s1, v1, s2, v2;
            cin >> n >> s1 >> v1 >> s2 >> v2;
            long long max_val = -1;
            if(s2 * v1 > s1 * v2){//说明物品2不会挑选超过s1个,枚举 物品2
                long long k = s1;
          
                k = min(s1, n/s2);
                for(long long t = k; t >= 0; t--){
                    long long val = t * v2;
                    long long remain_s = n - t * s2;
    
                    if(remain_s >= s1) val += (remain_s/s1) * v1;
    
                    max_val = max(max_val, val);
                }
            }else{//说明物品1不会挑选超过s2个,枚举 物品1
                long long k = s2;
                k = min(s2, n/s1);
    
                for(long long t = k; t >= 0; t--){
                    long long val = t * v1;
                    long long remain_s = n - t * s1;
                    if(remain_s >= s2) val += (remain_s/s2) * v2;
                    max_val = max(max_val, val);
                }
            }
            cout << "Case #" << kase++ << ": " << max_val << "
    ";
        }
    }
  • 相关阅读:
    Access小用之感
    PHP学习之路今日开启
    IBatis初体验2
    PHP之PDO介绍
    javascript key code 大全
    如何将虚拟机中的Linux系统与shell终端连接
    linux磁盘情况查询
    vi和vim编辑器的使用
    Linux磁盘分区,挂载
    (转)Android Dalvik虚拟机初识
  • 原文地址:https://www.cnblogs.com/Jadon97/p/8540542.html
Copyright © 2011-2022 走看看