您的位置:首页 > 其它

Problem_1013

2016-03-29 21:37 351 查看
题意:

一个公司每月要么盈余,要么亏损,且一年中每个月的盈余是一样的,亏损也是一样的。

财务统计是每五个月统计一次收入总额,即1-5,2-6……8-12,一年共有8次统计结果,并且这八次结果公司都亏损的。给出surplus和deficit,求出全年最大的盈余数。

输入:

每一行包括两个整数   surplus和dificit

输出:

对于每一行输入,输出一个最大的盈余数

解题思路:

典型的贪心算法。要循环8次,把5个月放在一起看,尽可能增加五个月中盈余的月数,即让这五个月在亏损的情况下亏损最少。其实也就以下几种情况:

(1)SSSSD SSSSD SS

(2)SSSDD SSSDD SS

(3)SSDDD SSDDD SS

(4)SDDDD SDDDD SD

感想:

现在真的很头疼这个题意,看明白了题意之后其实这些题目并不难,只是英语学的不到家,题目看不明白,搞不清楚状况,自然是老虎吃鳖,无从下口。代码中被注释掉的部分其实是我第一次提交失败的代码,我感觉这个代码更高级一点,但是提交的时候显示超时了,很无奈啊,有时候自己感觉写的不错的,高级的代码总是有各种各样的问题,但是那些枚举出来的一眼就能看明白的代码却能AC。无奈啊!

 

代码如下:

#include<iostream>

#include<cstring>

using namespace std;

int SurplusPosition(int s,
int d)

{

/*int  month[12] ,SumSur = 0,total=0 ;

memset(month, 0, sizeof(month));

for (int i = 0; i < 8; i++)

{

while (1)

{

int SumDif = 0;

for (int j = i; j <= i + 4; j++)

SumDif += month[j];

SumSur = 5 - SumDif;

if (SumSur*s > SumDif*d)

{

for (int k = i + 4; k > 0; k--)

{

if (month[k] != 1)

{

month[k] = 1;

break;

}

}

}

else

break;

}

}

SumSur = 0;

for (int l = 0; l < 12; l++)

if (month[l] == 0)

SumSur++;

total = SumSur*s - (12 - SumSur)*d;

*/

int total = 0;

if (4*s <
d)

{

total = 10 * s - 2 *
d;

}

else

if (3 *
s < 2 * d)

{

total = 8 * s - 4 *
d;

}

else

if (2 *
s < 3 * d)

{

total = 6 * s - 6 *
d;

}

else 

if (s < 4 *
d)

{

total = 3 * s - 9 *
d;

}

return total;

}

int main()

{

int Surplus, Deficit, Result = 0;

while (cin
>> Surplus >> Deficit)

{

Result = SurplusPosition(Surplus, Deficit);

if (Result <= 0)

{

cout << "Deficit" << endl;

}

else

cout << Result
<< endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: