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;    
    }
  • 相关阅读:
    计划任务工具-windows
    [JavaWeb基础] 017.Struts2 和 ajax交互简介
    html5学习之路_007
    [PHP学习教程
    [PHP学习教程
    [注]还原记忆力的真面目
    理解Java对象序列化
    HashTable和HashMap的区别详解
    HDFS NameNode内存全景
    HDFS 原理、架构与特性介绍
  • 原文地址:https://www.cnblogs.com/Lyush/p/2569628.html
Copyright © 2011-2022 走看看