您的位置:首页 > 其它

poj-2586-Y2K Accounting Bug

2016-03-28 10:44 323 查看
传送门

题意:有一个公司,每个月要么盈利s元,要么亏损d元。这个公司没五个月做一次统计,一个共做八次统计(即。1-5, 2-6, 3-7….),这八次统计都是亏损的。求这个公司这一年最多可以盈利多少钱

运用位运算,暴力计算就行了

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <cmath>
#include <set>
#include <cstring>
#include <string>
#include <algorithm>
#define N 500
#define ll long long
#define base 10000
using namespace std;
int bit[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};
int main(){
#ifndef ONLINE_JUDGE
freopen("1.txt", "r", stdin);
#endif
int i, j, s, d;
int a[15], sum, tmp, ans;
while(cin >> s >> d){
memset(a, 0, sizeof(a));
ans = -1;
tmp = 0;//tmp存放连续五个月的利润
for (i = 0; i < 4096; i++){//每个月有盈利和亏损两种情况,12个月共2^12=4096种情况,
sum = 0;
for (j = 0; j < 12; j++){
if (i&bit[j]){//i的某一位是1的时候,这个月是盈利的,否则是亏损的
a[j] = s;
}else{
a[j] = -d;
}
sum += a[j];
if (j == 4){
tmp = sum;
if (tmp > 0){
break;
}
}
if (j > 4){//要求每五个月都是亏损的
tmp += (a[j]-a[j-5]);
if (tmp > 0){
break;
}
}
}
if (j == 12){
ans = max(ans, sum);
}
}
if (ans < 0){
cout << "Deficit" << endl;
}else{
cout << ans << endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: