• UVa 12325 宝箱


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

    题意:有一个体积为N的箱子和两种数量无限的宝物。宝物1的体积为S1,价值为V1‘宝物2的体积为S2,价值为V2。计算出最多能装多大价值的宝物。

    思路:题目很清楚就是暴力枚举,但是如果不简化枚举的话肯定是会超时的,如果N/S1比较小,那就枚举宝物1的个数,如果N/S2比较小,则枚举宝物2的个数。还有一种情况就是S1和S2都很小,S2个宝物1和S1个宝物2的体积相等,而价值分别为S2*V1和S1*V2。如果前者比较大,则宝物2最多只会拿S1-1个(否则则可以把S1个宝物2换成S2个宝物1);如果后者比较大,则宝物1最多只会拿S2-1个。

     1 #include<iostream>
     2 using namespace std;
     3 
     4 long long N, S1,V1, S2,V2;
     5 long long maxn ;
     6 
     7 void solve1()
     8 {
     9     for (int i = 0; i <= N / S1; i++)
    10     {
    11         long long number = (N - i*S1) / S2;
    12         long long sum = i*V1 + number*V2;
    13         if (sum > maxn)  maxn=sum;
    14     }
    15 }
    16 
    17 void solve2()
    18 {
    19     for (int i = 0; i <= N / S2; i++)
    20     {
    21         long long number = (N - i*S2) / S1;
    22         long long sum = i*V2 + number*V1;
    23         if (sum > maxn)  maxn=sum;
    24     }
    25 }
    26 
    27 void solve3()
    28 {
    29     if (S2*V1<S1*V2)
    30     {
    31         for (int i = 0; i < S2 && i<=N/S1; i++)
    32         {
    33             long long number = (N - i*S1) / S2;
    34             long long sum = i*V1 + number*V2;
    35             if (sum > maxn)  maxn = sum;
    36         }
    37     }
    38     else
    39     {
    40         for (int i=0; i < S1&&i<=N/S2; i++)
    41         {
    42             long long number = (N - i*S2) / S1;
    43             long long sum = i*V2 + number*V1;
    44             if (sum > maxn)  maxn = sum;
    45         }
    46     }
    47 }
    48 
    49 int main()
    50 {
    51     int n, kase = 0;
    52     cin >> n;
    53     while (n--)
    54     {
    55         cin >> N >> S1 >> V1 >> S2 >> V2;
    56         maxn = 0;
    57         if (S1<100 && S2<100) 
    58         solve3();
    59         else if (N / S1 < N / S2)  solve1();
    60         else solve2();
    61         cout << "Case #" << ++kase << ": " << maxn << endl;
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    面试官:Redis中字符串的内部实现方式是什么?
    面试官:Redis中哈希数据类型的内部实现方式是什么?
    面试官:Redis中列表的内部实现方式是什么?
    java多线程之sleep 与 yield 区别
    JMH:基准测试工具套件应用
    多线程之interrupt与优雅停止一个线程
    java中sleep与 yield 区别
    JUC高并发编程详细教程
    java中线程的6中状态
    手把手教你用Python网络爬虫进行多线程采集高清游戏壁纸
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6298569.html
Copyright © 2020-2023  润新知