首页 > 代码库 > bzoj 1088 简单dfs
bzoj 1088 简单dfs
/* 题意:给你一列只能取0和1的数。 限制:每3个相邻的数的值固定,开头和结尾只限制两个数 求:有多少种组合方案 解:搜索,在开头和结尾再加一个只能取零的数,直接判断是否符合条件即可 */ #include<stdio.h> #include<string.h> #include<stdlib.h> using namespace std; #define N 11000 int sum; int dp[N]; int a[N],n; void dfs(int i) { if(i==2) { if(dp[i]-dp[i-2]!=a[i-1]) return ; } if(i>2) { if(dp[i]-dp[i-3]!=a[i-1]) return ; } if(i==n+1) { sum++; return ; } if(i==n) { dp[i+1]=dp[i]; dfs(i+1); } else { dp[i+1]=dp[i]; dfs(i+1); dp[i+1]=dp[i]+1; dfs(i+1); } return ; } int main() { int i; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); if(n==1) { printf("%d\n",a[1]); continue; } sum=0; dp[0]=0; dp[1]=0; dfs(1); // printf("%d\n",sum); dp[1]=1; dfs(1); printf("%d\n",sum); } return 0;}
bzoj 1088 简单dfs
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。