POJ-2586-Y2K Accounting Bug [规律]
2017-04-10 22:39
405 查看
题目传送门
题意:一家公司每个月都有盈利s或者亏损d。 每连续5个月的总和是亏损的,即1-5,2-6,3-7……8-12一共8组之和都是负数。求一年最高盈利量。
思路:每5个月的总和为亏损,即要尽量将亏损的月份放的靠后一些,又因为要使盈利尽量多,就让亏损的月份最少。
假设前4个月盈利后一个月亏损,即12个月可以表示为 111101111011
假设前3个月盈利后两个月亏损,即12个月可以表示为 111001110011
1为盈利0为亏损。
即可发现规律 如果每5个月盈利x个月可以保证满足5个月总和是亏损,并且亏损量最小,即有
Sum= s*x*2 + s*(x>=2?2:x) - d*(5-x)2 - d(x>=2?0:(2-x));
如果Sum为负值,则无解。
题意:一家公司每个月都有盈利s或者亏损d。 每连续5个月的总和是亏损的,即1-5,2-6,3-7……8-12一共8组之和都是负数。求一年最高盈利量。
思路:每5个月的总和为亏损,即要尽量将亏损的月份放的靠后一些,又因为要使盈利尽量多,就让亏损的月份最少。
假设前4个月盈利后一个月亏损,即12个月可以表示为 111101111011
假设前3个月盈利后两个月亏损,即12个月可以表示为 111001110011
1为盈利0为亏损。
即可发现规律 如果每5个月盈利x个月可以保证满足5个月总和是亏损,并且亏损量最小,即有
Sum= s*x*2 + s*(x>=2?2:x) - d*(5-x)2 - d(x>=2?0:(2-x));
如果Sum为负值,则无解。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int main(void) { int s,d; while (~scanf("%d %d", &s, &d)) { int mxsum=0,mx=-1; for (int i = 0; i <= 5; i++) { int sum = 0; sum = i*s-(5-i)*d; if (sum<0) { if (mxsum==0||mxsum<sum) { mxsum=sum; mx=i; } } } int S; S = s*mx*2 + s*(mx>=2?2:mx) - d*(5-mx)*2 - d*(mx>=2?0:(2-mx)); if (S<0) printf("Deficit\n"); else printf("%d\n",S); } return 0; }
相关文章推荐
- POJ_2586 Y2K Accounting Bug(贪心)
- POJ 2586:Y2K Accounting Bug:贪心法
- poj2586 Y2K Accounting Bug(贪心,java)
- POJ 2586 Y2K Accounting Bug(贪心)
- poj2586 Y2K Accounting Bug 贪心
- poj-2586 Y2K Accounting Bug
- POJ 2586 Y2K Accounting Bug(贪心)
- POJ 2586 Y2K Accounting Bug贪心
- POJ 2586 Y2K Accounting Bug 贪心策略
- Y2K Accounting Bug POJ - 2586 (贪心+枚举)
- poj2586——Y2K Accounting Bug
- poj 2586 Y2K Accounting Bug (贪心)
- Y2K Accounting Bug POJ - 2586 (贪心+枚举)
- Poj 2586 / OpenJudge 2586 Y2K Accounting Bug
- poj 2586 Y2K Accounting Bug
- POJ 2586:Y2K Accounting Bug(贪心)
- POJ 2586 Y2K Accounting Bug(枚举大水题)
- poj 2586 Y2K Accounting Bug(贪心)
- POJ 2586 Y2K Accounting Bug(贪心)
- POJ 2586 Y2K Accounting Bug(贪心+枚举)