这道题目的意思是有12个月,每个月要么盈利s,要么亏损d,没连续五个月就又一次上表,总共有八次note,每次都亏损,现给出s和d,要求如果有盈利的情况,求出盈利情况中盈利最多的数目,否则就输出"Deficit“这道题总共有2^16中可能,可以用dfs枚举每种可能,然后求出满足题意的盈利最大值。思路很简单,下面是代码:
#include <stdio.h>
#include <stdlib.h>
int s[12];
int Max;
int n,m;
bool Is_right(int *t){
int i;
for(i=0;i<8;i++){
int temp=t[i]+t[i+1]+t[i+2]+t[i+3]+t[i+4];
if(temp>=0)
return false;
}
return true;
}
void dfs(int *p,int deep){
if(Is_right(p)){
int sum=0;
for(int i=0;i<12;i++)
sum+=p[i];
if(sum>Max)
Max=sum;
}
if(deep>=12)
return ;
int record[12];
for(int i=0;i<12;i++)
record[i]=p[i];
record[deep]=n;
dfs(p,deep+1);
dfs(record,deep+1);
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF){
int i;
for(i=0;i<12;i++)
s[i]=-m;
Max=-1;
dfs(s,0);
if(Max>=0)
printf("%d\n",Max);
else
printf("Deficit\n");
}
return 0;
}