POJ 2586 Y2K Accounting Bug(贪心)

http://poj.org/problem?id=2586

题意:

每次输入两个数s和d,这个公司每个月要么盈利s,要么亏损d。公司每5个月进行一次审查,一年8次(即1~5,2~6...),每次都是亏损。问一年下来公司能盈利否,如果行则计算出最大盈利值。

思路:

每5个月中肯定是有亏损月的,那么这些月份肯定放在中间比较好,使用的比较多。

我的做法是每次5个月相加,如果盈利了,则先将后面的月份改为亏损直至这5个月亏损。最后将12个月的情况相加就可以了。

 1 #include<iostream> 
 2 #include<string>
 3 #include<cstring>
 4 using namespace std;
 5 
 6 int s, d;
 7 int month[13];
 8 
 9 
10 
11 int main()
12 {
13     //freopen("D:\txt.txt", "r", stdin);
14     int sum;
15     while (cin >> s >> d)
16     {
17         memset(month, 0, sizeof(month));
18         for (int i = 1; i <= 8; i++)
19         {
20             sum = 0;
21             for (int j = i; j <= i + 4; j++)
22             {
23                 if (month[j] == 0)  month[j] = s;
24                 sum += month[j];
25             }
26             int cnt = i + 4;
27             while (sum >= 0)
28             {
29                 if (month[cnt] > 0)  month[cnt] = -d;
30                 sum = sum - s - d;
31                 cnt--;
32             }
33         }
34         sum = 0;
35         for (int i = 1; i <= 12; i++)
36             sum += month[i];
37         if (sum > 0)
38             cout << sum << endl;
39         else
40             cout << "Deficit" << endl;
41     }
42     return 0;
43 }
原文地址:https://www.cnblogs.com/zyb993963526/p/6368769.html