贪心算法—Problem N
题意
某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利s,如果亏空则亏空d。公司每五个月进行一次统计,全年共统计8次(1-5、2-6、3-7、4-8、5-9、6-10、7-11、8-12),已知这8次统计的结果全部是亏空(盈利-亏空<0)。题目给出每月的S和D,判断全年是否能盈利,如果能则求出盈利的最大值,如果不能盈利则输出Deficit。
解题思路
一共统计了8次,8次都是亏空的,要保证尽量盈利。所以把亏空放到5月份,这时有一个月亏空四个月盈余,如果不能保证1-5月总额亏空,再在4月亏空,这时两个月亏空三个月盈余···以此类推,直到1-5月亏空,这时全年必亏空。6-10月和1-5月相同,复制即可。最后根据输入情况判断输出最大盈余或者Deficit。
感想
刚开始看不懂题意,借助翻译工具仔细查看后才明白题意,分析一下,和数学题差不多,只是加入了贪心思想,使问题看起来复杂了些。
AC代码
#include
using namespace std;
int main()
{
int s,d,res;
while(cin>>s>>d)
{
if (d > 4 * s) res = 10 * s -2 * d;
else if (2 * d > 3 * s) res =8 * s - 4 * d;
else if (3 * d > 2 * s) res =6 * s - 6 * d;
else if (4 * d > s) res = 3 *s - 9 * d;
else res = -12 * d;
if (res <= 0) cout<<"Deficit"<
else cout<
}
return 0;
}