码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2586Y2K Accounting Bug

时间:2015-02-23 10:52:22      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

//这道题用到了贪心的思想,首先题目意思如下:ACM遭到了一个bug使得重要数据丢失,然后只知道s(盈余)和d(亏损),每个月的盈余和亏损是一样的,然后该公司每5个月统计一次,即1到5,2到6,3到7,……,8到12,都是亏损的,然后问你该公司今年收入最多是多少?

//所谓的贪心就是想尽办法达到最多的盈余,稍微分析可知,亏损放在越后面越好,因为已知每次统计都有重叠,一开始没有重叠,然后2,3,等都有共有的,用区间表示更加清楚,然后在有盈余和亏损一样的特点可知每次5个月的统计亏损的数量都是一样的,这样才能保证收入最大(贪心的重要体现),然后就有如下:

如果ssssd <0 ,那么每个月都是只有1次亏损,即ssssd,ssssd,ss;共10次s;

如果sssdd<0,那么每个月都是只有2次亏损,即sssdd,sssdd,ss;共8次s;

如果ssddd<0,那么每个月都是只有3次亏损,即ssddd,ssddd,ss;共6次s;

如果sdddd<0,那么每个月都是只有4次亏损,即sdddd,sdddd,sd;共3次s;

5次直接赋值为-1;

技术分享
 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int s, d, numd, sum;
 9     while(~scanf("%d%d", &s, &d)){
10         for(int i = 1; i <= 5; i++)
11             if((5-i)*s-i*d < 0){
12                 numd = i;
13                 break;
14             }
15         if(numd == 1)
16             sum = 10*s-2*d;
17         else if(numd == 2)
18             sum = 8*s-4*d;
19         else if(numd == 3)
20             sum = 6*s-6*d;
21         else if(numd == 4)
22             sum = 3*s-9*d;
23         else if(numd == 5)
24             sum = -1;
25         if(sum < 0)
26             printf("Deficit\n");
27         else
28             printf("%d\n", sum);
29     }
30     return 0;
31 }
View Code

 

poj 2586Y2K Accounting Bug

标签:

原文地址:http://www.cnblogs.com/zhenhao1/p/4297911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!