poj.2586dfs

来源:互联网 发布:死飞淘宝店 编辑:程序博客网 时间:2024/05/28 17:06

这道题目的意思是有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);elseprintf("Deficit\n");}return 0;}


原创粉丝点击