POJ 2586 Y2K Accounting Bug(贪心)
http://poj.org/problem?id=2586
题意:
每次输入两个数s和d,这个公司每个月要么盈利s,要么亏损d。公司每5个月进行一次审查,一年8次(即1~5,2~6...),每次都是亏损。问一年下来公司能盈利否,如果行则计算出最大盈利值。
思路:
每5个月中肯定是有亏损月的,那么这些月份肯定放在中间比较好,使用的比较多。
我的做法是每次5个月相加,如果盈利了,则先将后面的月份改为亏损直至这5个月亏损。最后将12个月的情况相加就可以了。
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 using namespace std; 5 6 int s, d; 7 int month[13]; 8 9 10 11 int main() 12 { 13 //freopen("D:\\txt.txt", "r", stdin); 14 int sum; 15 while (cin >> s >> d) 16 { 17 memset(month, 0, sizeof(month)); 18 for (int i = 1; i <= 8; i++) 19 { 20 sum = 0; 21 for (int j = i; j <= i + 4; j++) 22 { 23 if (month[j] == 0) month[j] = s; 24 sum += month[j]; 25 } 26 int cnt = i + 4; 27 while (sum >= 0) 28 { 29 if (month[cnt] > 0) month[cnt] = -d; 30 sum = sum - s - d; 31 cnt--; 32 } 33 } 34 sum = 0; 35 for (int i = 1; i <= 12; i++) 36 sum += month[i]; 37 if (sum > 0) 38 cout << sum << endl; 39 else 40 cout << "Deficit" << endl; 41 } 42 return 0; 43 }