//这道题用到了贪心的思想,首先题目意思如下: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 }
时间: 2024-12-28 20:13:30