题目地址:http://poj.org/problem?id=2586
1 /*
2 题意:某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利S,如果亏空则亏空D。
3 公司每五个月进行一次统计,全年共统计8次(1-5、2-6、3-7、4-8、5-9、6-10、7-11、8-12),
4 已知这8次统计的结果全部是亏空(盈利-亏空<0)。题目给出S和D,判断全年是否能盈利,
5 如果能则求出盈利的最大值,如果不能盈利则输出Deficit
6 贪心 or 枚举
7 1. 贪心抓住亏损的月尽量在5个月的后面,这样可以被下一次利用,从而获取最大值
8 2. 可以枚举是因为可能的情况少
9 详细解释:http://blog.csdn.net/lyy289065406/article/details/6642603
10 */
11 #include <cstdio>
12 #include <iostream>
13 #include <algorithm>
14 #include <cstring>
15 #include <cmath>
16 #include <string>
17 #include <map>
18 #include <queue>
19 #include <vector>
20 using namespace std;
21
22 const int MAXN = 1e6 + 10;
23 const int INF = 0x3f3f3f3f;
24 int used[13];
25
26 void work(int s, int d)
27 {
28 int sum = 0; int cnt; int k;
29
30 cnt = 5;
31 while (s * (cnt) - d * (5 - cnt) > 0 && cnt > 0) cnt--;
32 k = 5 - cnt;
33 sum += s * (5 - k) - d * k;
34 for (int i=5; i>=1 && k--; --i) used[i] = 1;
35
36 for (int i=2; i<=8; ++i)
37 {
38 int n = 0;
39 for (int j=i; j<=4+i-1; ++j)
40 {
41 if (used[j]) n++;
42 }
43 int tmp = 0;
44 tmp += s * (4 - n) - d * n;
45 if (tmp < 0 && tmp + s < 0) sum += s;
46 else
47 {
48 sum -= d; used[i+4] = 1;
49 }
50 }
51
52 (sum >= 0) ? printf ("%d
", sum) : puts ("Deficit");
53 }
54
55 int main(void) //POJ 2586 Y2K Accounting Bug
56 {
57 //freopen ("E.in", "r", stdin);
58
59 int s, d;
60 while (~scanf ("%d%d", &s, &d))
61 {
62 memset (used, 0, sizeof (used));
63 work (s, d);
64 }
65
66 return 0;
67 }
68
69 /*
70 #include <cstdio>
71 #include <iostream>
72 #include <algorithm>
73 #include <cmath>
74 using namespace std;
75
76 int main(void)
77 {
78 //freopen ("E.in", "r", stdin);
79
80 int s, d;
81 while (~scanf ("%d%d", &s, &d))
82 {
83 int ans = 0;
84 if (4 * s - d < 0)
85 {
86 ans = 10 * s - 2 * d;
87 }
88 else if (3 * s - 2 * d < 0)
89 {
90 ans = 8 * s - 4 * d;
91 }
92 else if (2 * s - 3 * d < 0)
93 {
94 ans = 6 * s - 6 * d;
95 }
96 else if (1 * s - 4 * d < 0)
97 {
98 ans = 3 * s - 9 * d;
99 }
100 else ans = -1;
101 if (ans > 0) printf ("%d
", ans);
102 else puts ("Deficit");
103 }
104
105 return 0;
106 }
107 */