• 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;    
    }
  • 相关阅读:
    简单说说数据库表设计的三种范式
    存储过程简单的动态订单号
    Asp.Net页面生命周期
    jq 小笔记,上传判断其格式
    吃一垫长一智
    离散事件模拟
    二叉树查找树
    冷暖自知
    基督徒的人生箴言
    迷宫寻路
  • 原文地址:https://www.cnblogs.com/Lyush/p/2569628.html
Copyright © 2020-2023  润新知