POJ 2586 Y2K Accounting Bug(贪心)
题意真纠结啊。神马盈余,负债的。。。差不多看懂样例了,是反正一年12个月可能赚钱,可能赔钱。。。
题意:1-5月, 2-6月....8-12月,做8次统计,在统计内的5个月,整体上都是赔钱的。求这一年可能盈利多少。
第一想法枚举,2^12次方,然后TLE,换了乱搞办法,和暴力的对拍,讨论5个月,盈利最多的情况下,依旧赔钱,乱搞一下就行。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 #define N -100000000 8 int main() 9 { 10 int i,j,s,d,ans,k,sum; 11 int o[13]; 12 while(scanf("%d%d",&s,&d)!=EOF) 13 { 14 ans = N; 15 /*for(i = 1;i < (1<<12);i ++)//暴力的方法 16 { 17 memset(o,0,sizeof(o)); 18 for(j = 0;j <= 11;j ++) 19 { 20 if(i&(1<<j)) 21 o[j+1] = 1; 22 } 23 for(j = 1;j <= 8;j ++) 24 { 25 sum = 0; 26 for(k = j;k <= j+4;k ++) 27 { 28 if(o[k]) 29 sum += s; 30 else 31 sum -= d; 32 } 33 if(sum >= 0) break; 34 } 35 if(j == 9) 36 { 37 sum = 0; 38 for(k = 1;k <= 12;k ++) 39 { 40 if(o[k]) 41 sum += s; 42 else 43 sum -= d; 44 } 45 if(ans < sum&&sum > 0) 46 ans = sum; 47 } 48 } 49 */ 50 for(i = 1;i <= 4;i ++) 51 { 52 if(i == 1) 53 { 54 if(4*s-d < 0) 55 { 56 sum = 10*s - 2*d; 57 if(ans < sum&&sum > 0) 58 ans = sum; 59 } 60 } 61 else if(i == 2) 62 { 63 if(3*s-2*d < 0) 64 { 65 sum = 8*s - 4*d; 66 if(ans < sum&&sum > 0) 67 ans = sum; 68 } 69 } 70 else if(i == 3) 71 { 72 if(2*s-3*d < 0) 73 { 74 sum = 6*s - 6*d; 75 if(ans < sum&&sum > 0) 76 ans = sum; 77 } 78 } 79 else if(i == 4) 80 { 81 if(s-4*d < 0) 82 { 83 sum = 3*s - 9*d; 84 if(ans < sum&&sum > 0) 85 ans = sum; 86 } 87 } 88 } 89 if(ans == N) 90 printf("Deficit\n"); 91 else 92 printf("%d\n",ans); 93 } 94 return 0; 95 }