一个简单贪心思想的数学题,一开始还不懂题意,以为题很难、、、
题意:MS公司每个月要么亏损 d ,要么盈利 s,一年中每连续五个月都为亏损,问MS公司是否能盈利,若能输出最大盈 利金额,否则,输出Deficit
分析:一年中连续五个月有 1-5,2-6,3-7,4-8,5-9,6-10,7,-11,8-12,要求在保证这八个时间段为亏损的情况下,
求最大盈利。因此每五个月中,应将亏损月靠后。
在保证连续5个月都亏损的前提下,使得每5个月中亏损的月数最少。
x=1: ssssd,ssssd,ss d>4s 赢利10个月 10s-2d
x=2: sssdd,sssdd,ss 2d>3s 赢利8个月 8s-4d
x=3: ssddd,ssddd,ss 3d>2s 赢利6个月 6s-6d
x=4: sdddd,sdddd,sd 4d>s 赢利3个月 3s-9d
x=5: ddddd,ddddd,dd 4d<s 无赢利
x=2: sssdd,sssdd,ss 2d>3s 赢利8个月 8s-4d
x=3: ssddd,ssddd,ss 3d>2s 赢利6个月 6s-6d
x=4: sdddd,sdddd,sd 4d>s 赢利3个月 3s-9d
x=5: ddddd,ddddd,dd 4d<s 无赢利
AC代码
#include<stdio.h>
int main()
{
__int64 s,d,k;
while(scanf("%I64d%I64d",&s,&d)!=EOF){
if(4*s<d)
k=10*s-2*d;
else if(3*s<2*d)
k=8*s-4*d;
else if(2*s<3*d)
k=6*s-6*d;
else if(s<4*d)
k=3*s-9*d;
else
k=-1;
if(k<0)
printf("Deficit\n");
else
printf("%I64d\n",k);
}
return 0;
}