• UVA-12325 Zombie's Treasure Chest 思维,枚举


    UVA-12325 Zombie's Treasure Chest 思维,枚举

    题意

    现有一个体积为(N)的箱子和两种数量无限的宝物。宝物1的体积为(S1) ,价值为(V1) ,宝物2的体积为(S2) ,价值为(V2)

    保证输入均为32位带符号整数。

    给出能够装纳的最大价值。

    分析

    直接背包,复杂度肯定不对。

    特殊性质在于只有两个物品,考虑贪心的选择。

    若$N / S1 $ 比较小,在枚举范围内,那么直接枚举宝物1的数量。

    (N/S2) 比较小,在枚举范围内,那么直接枚举宝物2的数量。

    (N / S1 and N / S2) 都比较大,说明(S1,S2) 比较小。

    由于(S1 imes S2 = S2 imes S1)

    这说明我们会贪心的选择性价比较高的。这表明还是可以把枚举量控制在S内。

    代码

    vconst ll N = 1e5;
    
    int main() {
        int T = readint();
        int kase = 1;
        while (T--) {
            ll res = 0;
            ll n = readll();
            ll s1 = readll(), v1 = readll(), s2 = readll(), v2 = readll();
            swap(s1, v1);
            swap(s2, v2);
            if (n / v1 <= N) {
                for (ll i = 0; i <= n / v1; i++)
                    res = max(res, i * s1 + (n - v1 * i) / v2 * s2);
            }
            else if (n / v2 <= N) {
                for (ll i = 0; i <= n / v2; i++)
                    res = max(res, i * s2 + (n - v2 * i) / v1 * s1);
            }
            else {
                for (ll i = 0; i < v1; i++)
                    res = max(res, i * s2 + (n - i * v2) / v1 * s1);
                for (ll i = 0; i < v2; i++)
                    res = max(res, i * s1 + (n - i * v1) / v2 * s2);
            }
            printf("Case #%d: ", kase++);
            Put(res);
            puts("");
        }
    }
    
    
  • 相关阅读:
    SE Springer小组之《Spring音乐播放器》需求分析说明书一
    SE Springer小组之《Spring音乐播放器》可行性研究报告一、二(转载)
    SE Springer小组之《Spring音乐播放器》可行性研究报告五、六
    软件分析之QQ
    浅谈《软件工程》
    前端格式
    Django基础
    正则表达式
    任务-线程
    一名奔三的程序猿的困惑
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13646694.html
Copyright © 2020-2023  润新知