【思路】
为了让最终盈利尽可能多,每五个月中要保证亏损月数尽可能最少;其次,五个月中亏损的月份要尽可能靠后。先计算出要保证每五个月亏损需要的最多盈利月数smonth,对于smonth(其中0表示亏损月份,1表示盈利月份):
如果smonth=0,必然亏损;
如果smonth=1,最优方案为100001000010,此时盈利3个月,亏损9个月;
如果smonth=2,最优方案为110001100011,此时盈利6个月,亏损6个月;
如果smonth=3,最优方案为111001110011,此时盈利8个月,亏损4个月;
如果smonth=4,最优方案为111101111011,此时盈利10个月,亏损2个月。
根据上述情形直接计算出结果即可。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int s,d; 5 6 int main() 7 { 8 while (scanf("%d%d",&s,&d)!=EOF) 9 { 10 int smonth; 11 for (smonth=4;smonth>=0;smonth--) 12 if (s*smonth-d*(5-smonth)<0) break; 13 int ans; 14 switch (smonth) 15 { 16 case 0:ans=-1;break; 17 case 1:ans=s*3-d*9;break; 18 case 2:ans=s*6-d*6;break; 19 case 3:ans=s*8-d*4;break; 20 case 4:ans=s*10-d*2;break; 21 } 22 if (ans>0) cout<<ans<<endl; 23 else cout<<"Deficit"<<endl; 24 } 25 return 0; 26 }
时间: 2025-01-14 06:54:25