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;
}
     运行结果:

2586Accepted164K16MSC++620B2011-07-31 16:24:54


   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值