POJ_2586_Y2K Accounting Bug(贪心.分情况讨论)
关键是读懂题意,题意就是说:你输入这个公司每月的的盈利金额s和每月的亏损金额d
,已知每个月亏损和盈利都是同样的金额。它没5个月统计一次数据1-5,2-6,3-7.......总共统计了
8次,在每次统计中保证这五个月内都是亏损的,然后计算满足这种情况下一年的最大盈利。
方法:简单枚举,五个月中有4个月是盈利的,那么必须满足4*s<d;
即:ssssd.ssssd.ss;那么盈利情况便是10*s-2*d;不必考虑太多你d>4*s的话d肯定是大于
3*s的。
ssssd,ssssd,ss d>4s 赢利10个月 10s-2d
sssdd,sssdd,ss 2d>3s 赢利8个月 8s-4d
ssddd,ssddd,ss 3d>2s 赢利6个月 6s-6d
sdddd,sdddd,sd 4d>s 赢利3个月 3s-9d
ddddd,ddddd,dd 4d<s 无赢利
sssdd,sssdd,ss 2d>3s 赢利8个月 8s-4d
ssddd,ssddd,ss 3d>2s 赢利6个月 6s-6d
sdddd,sdddd,sd 4d>s 赢利3个月 3s-9d
ddddd,ddddd,dd 4d<s 无赢利
需要注意的是:这些判断的顺序不能改变,这样说吧,判断条件保证了5个月是亏损的,而顺序是保证的找到盈利最大的。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # include <stdio.h> 2 int main() 3 { 4 int k,s,d; 5 while(scanf("%d%d",&s,&d) != EOF) 6 { 7 if(d>4*s) 8 k=10*s-2*d; 9 else if(2*d>3*s) 10 k=8*s-4*d; 11 else if(3*d>2*s) 12 k=6*s-6*d; 13 else if(4*d>s) 14 k=3*s-9*d; 15 else 16 k=-1; 17 if(k<0) 18 printf("Deficit\n"); 19 else 20 printf("%d\n",k); 21 } 22 return 0; 23 }