题目:http://poj.org/problem?id=2586
题目十分难懂啊,大意是:MS公司,对于每一个月来说,每个月的利润,如果盈利则盈利s,如果亏空则亏d(s和d是固定的)。MS每五个月进行一次统计,共统计八次(1-5月一次,2-6月一次.......)统计的结果,统计结果为这八次都是亏空的。现在要统计一年的最大利润。
假设12个月的利润为t1, t2, t3, t4,t5,……t11,t12(ti = s或者 -d)。因为每次统计都是亏损的,则t1 + t2 + t3 + ……t 5 < 0;则 至少存在一个 -d。为了使利润最大化,就得是-d的个数最少。因此,使用贪心算法。存在以下几种可能性:
1.ssssd循环. 则12个月为ssssdssssdss . 4s>d的情况
2.sssdd循环. 则12个月为sssddsssddss 3s>2d
3.ssddd循环. 则12个月为ssdddssdddss 2s>3d
4.sdddd循环. 则12个月为sddddsddddsd s>4d
5.ddddd循环. 则12个月为dddddddddddd
#include <stdio.h>
#define ONLINE
void online()
{
#ifdef ONLINE
#else
freopen("2586.in","r",stdin);
freopen("2586.out","w",stdout);
#endif
}
int s, d;
int main()
{
online();
while (scanf("%d%d", &s, &d)!=EOF)
{
int result = -1;
if (4*s < d)
{
result = 10 * s - 2 * d;
}
else if (3*s < 2 * d)
{
result = 8 * s - 4 * d;
}
else if (2*s < 3*d)
{
result = 6 * s- 6 * d;
}
else if (s < 4 * d)
{
result = 3 * s - 9 * d;
}
if (result < 0 )
{
printf("Deficit\n");
}
else
{
printf("%d\n", result);
}
}
return 0;
}
运行结果:
2586 | Accepted | 164K | 16MS | C++ | 620B | 2011-07-31 16:24:54 |