POJ 2586 Y2K Accounting Bug(贪心+枚举)

原创 2017年04月07日 14:28:49

原题地址

http://poj.org/problem?id=2586

题意:已知每个月的经营状况要么盈利s,要么亏损d,若每五个月的汇总都是亏损,求这一年12个月最大盈利额(不能盈利则输出Deficit)。

解题思路

这道题被划分到贪心的题库里,但是其实不用花时间在贪心算法的设计上。

最直观的贪心思路就是,为了使每5个月亏损且总和盈利,那就要利用相邻的5个月的重叠部分,将亏损的月份放在这些部分且使每5个月的亏损值最小。即:让亏损的月份在尽量往后排,向右辐射。

以测试样例为例,每个月要么盈利59,要么亏损237,根据上面的贪心思想,做出一下安排:
1. 先处理1-5月,不难发现,在前4个月盈利后1个月亏损的安排下,保证了5个月经营之和为负,且亏损额尽可能少。因此,每5个月4s1d是这次例子的贪心模式。
2. 再处理之后的与安排亏损的5月份有交集的每5个月,对于2-6月由于5月份已经安排过d,所以6月份继续排s,3-7月、4-8月、5-9月以此类推…
3. 再处理6-10月时重复1-5月的安排,剩余的月份参照步骤2的安排。
4. 统计盈利月份数=10,亏损月份数=2,全年经营之和即10*59-2*237=+116

由于这道题比较简单,我们可以手动模拟推出每5个月在不同s、d组合下,找到使全年盈利额最大的贪心模式、全年盈利及亏损月份数

  • SSSSDSSSSDSS(4s 1d,总计10s 2d)
  • SSSDDSSSDDSS(3s 2d,总计8s 4d)
  • SSDDDSSDDDSS(2s 3d,总计6s 6d)
  • SDDDDSDDDDSD(1s 4d,总计3s 9d)
  • DDDDDDDDDDDD(0s 5d,总计0s 12d)

AC代码

#include <iostream>

using namespace std;

int main()
{
    int s, d, dSeason, sum; //dSeason指每五个月亏损最少需要几个d
    int dYear[] = {2, 4, 6, 9, 12}; //每五个月里需要的d造成的年亏损月份数
    while (cin >> s >> d)
    {
        dSeason = 1; //至少亏损一个月
        while ((5-dSeason)*s - dSeason*d > 0) ++dSeason;
        sum = (12-dYear[dSeason-1])*s - dYear[dSeason-1]*d; //年净收入
        if (sum < 0) cout << "Deficit" << endl;
        else cout << sum << endl;
    }
    return 0;
}

内存占用:224K 耗时:32ms
算法复杂度:O(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Poj -2586 Y2K Accounting Bug--枚举

Total Submissions: 11467   Accepted: 5768 Description Accounting for Computer Machinists (ACM) ha...

poj2586——Y2K Accounting Bug(贪心)

DescriptionAccounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost some vit...

poj2586 Y2K Accounting Bug 贪心

///2014.3.3 ///poj2586 /** *题目大意是一个公司在12个月中,或固定盈余s,或固定亏损d. *但记不得哪些月盈余,哪些月亏损, *只能记得连续5个月的代数和总是亏损(...

【贪心】POJ-2586 Y2K Accounting Bug

Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K       Descri...

poj 2586 Y2K Accounting Bug (贪心)

Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8678   Accepte...

POJ 2586 Y2K Accounting Bug (贪心)

Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13878   Accept...
  • cg66570
  • cg66570
  • 2016年09月30日 13:03
  • 86

【贪心】POJ2586 Y2K Accounting Bug

Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9553...

POJ 2586 Y2K Accounting Bug (贪心)

题目链接: http://poj.org/problem?id=2586 Y2K Accounting Bug Time Limit: 1000MS   Memory ...
  • sizaif
  • sizaif
  • 2017年05月30日 12:11
  • 155

POJ2586 Y2K Accounting Bug(贪心)

Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10975   Accep...

POJ2586 Y2K Accounting Bug (簡單貪心問題)

Description Accounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost some v...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 2586 Y2K Accounting Bug(贪心+枚举)
举报原因:
原因补充:

(最多只允许输入30个字)