zoukankan      html  css  js  c++  java
  • 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
    ",a[1]);
                continue;
            }
         sum=0;
         dp[0]=0;
        dp[1]=0;
         dfs(1);
        // printf("%d
    ",sum);
         dp[1]=1;
         dfs(1);
         printf("%d
    ",sum);
       }
    return 0;}
    

  • 相关阅读:
    Java 传递参数时,传递一个变量快还是传递一个实体类?
    13 设计模式
    12 反射
    11.多线程&&并发
    10.输入输出
    9.异常Exception
    7.正则表达式
    5.数组
    6.常见对象
    上传本地项目到Github
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6812948.html
Copyright © 2011-2022 走看看