POJ 2586 Y2K Accounting Bug贪心

   题目: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


   

你可能感兴趣的:(POJ 2586 Y2K Accounting Bug贪心)