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;}

时间: 2024-08-05 21:41:08

bzoj 1088 简单dfs的相关文章

[BZOJ 1088][SCOI2005]扫雷Mine

Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余"人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目.现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案. Input 第一行为N,第二行有N个数,依次为第二列的格

hdu 1016 Prime Ring Problem (简单DFS)

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25700    Accepted Submission(s): 11453 Problem Description A ring is compose of n circles as shown in diagram. Put natural numb

Red and Black(简单dfs)

Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12519    Accepted Submission(s): 7753 Problem Description There is a rectangular room, covered with square tiles. Each tile is color

ZOJ2165 简单DFS搜索

1 #include<iostream> 2 #include<cstring> 3 #include<cstdlib> 4 #include<algorithm> 5 #define MAXN 25 6 using namespace std; 7 int h,w; 8 int ans; 9 int dir[4][2]={-1,0,1,0,0,-1,0,1}; 10 char map[MAXN][MAXN]; 11 12 bool ok(int x,int

hdu 4739Zhuge Liang&#39;s Mines(简单dfs,需要注意重点)

Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1166    Accepted Submission(s): 505 Problem Description In the ancient three kingdom period, Zhuge Liang was the most famous

BZOJ 1088 扫雷Mine (递推)

题解:如果确定了第一排前两个数,那么剩下的数是唯一确定的,所以只要分情况讨论即可. #include <cstdio> #include <cstring> int n,a[10010],s[10010]; int ans(int x){ memset(a,0,sizeof a); if(x==1)a[1]=1; if(x==2)a[2]=1; if(x==3)a[1]=a[2]=1; for(int i=2;i<=n-1;i++){ a[i+1]=s[i]-a[i]-a[i

poj2386 Lake Counting(简单DFS)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1562 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 欢

POJ 1979 Red and Black (简单dfs)

题目: 简单dfs,没什么好说的 代码: #include <iostream> using namespace std; typedef long long ll; #define INF 2147483647 int w,h; char a[22][22]; int dir[4][2] = {-1,0,1,0,0,-1,0,1}; int ans = 0; void dfs(int x,int y){ if(x < 0 || x >= h || y < 0 || y &g

Bzoj 1088: [SCOI2005]扫雷Mine (DP)

Bzoj 1088: [SCOI2005]扫雷Mine 怒写一发,算不上DP的游戏题 知道了前\(i-1\)项,第\(i\)项会被第二列的第\(i-1\)得知 设\(f[i]\)为第一列的第\(i\)行位置是否有雷,有雷的话,\(f[i] = 1\),无雷\(f[i] = 0\) \(a[i]\)就是题目读入的东西. 那么转移方程就是\(f[i] = a[i - 1] - f[i - 1] - f[i - 2]\) 不满足限制的时候就是\(f[i] < 0\) 或者$ f[i] > 1$ 第一