zoukankan      html  css  js  c++  java
  • POJ2586 Y2K Accounting Bug 贪心

    这题题意是别人告诉的,现在这里表示感谢了。

    题目就是说给定一个盈利和一个亏损值,(一个月只可能盈利或者亏损)一年12个月,任意连续5个月的和值必须亏损。求十二个月的最大盈利是多少?

    解题思路:

    先确定前五个月的安排情况,把亏损的尽量安排靠后,然后再从2月到8月为起点进行暴力,每次能够新确定一个月的盈亏情况(根据5月之和小于零)。最后再确认12个月是否盈利。

    代码如下:

    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    int s, d, seq[15];
    
    void deal()
    {
        int c;
        for (int i = 4; i >= 0; --i) {
            c = s*i+(5-i)*d;
            if (c < 0) {
                c = i;
            //    puts("HHKHK");
                break;
            }  // 找出临界的第一个五月亏损,且盈利的月数尽可能的多 
        }
        for (int i = 1; i <= c; ++i) {
            seq[i] = s;
        }
        for (int i = c+1; i <= 5; ++i) {
            seq[i] = d;
        }
        for (int i = 2; i <= 8; ++i) {
            int k = i + 3, temp = 0;
            for (int j = i; j <= k; ++j) { 
                temp += seq[j];
            }
            if (temp + s < 0) {
                seq[i+4] = s;
            }
            else {
                seq[i+4] = d;
            }
        }
    }
    
    int main()
    {
        int ans;
        while (scanf("%d %d", &s, &d) == 2) {
            ans = 0;
            d *= -1;  // d 为负数表示亏损 
            deal();
            for (int i = 1; i <= 12; ++i) {
                ans += seq[i];
            }
            printf(ans > 0 ? "%d\n" : "Deficit\n", ans);
        }
        return 0;    
    }
  • 相关阅读:
    CSU 1122
    CSU 1256
    CSU 1240
    HDU 1874
    CSU 1004
    Problem F CodeForces 16E
    Problem E CodeForces 237C
    Problem C FZU 1901
    12-30
    2016-12-29
  • 原文地址:https://www.cnblogs.com/Lyush/p/2569628.html
Copyright © 2011-2022 走看看