【Wikioi】1065-01字符串

来源:互联网 发布:hemingway软件 编辑:程序博客网 时间:2024/05/18 02:26

输出仅有0和1组成的长度为n的字符串,并且其中不能含有3个连续的相同子串。

简单的方法是用递推:

#include<stdio.h>int main(){    int n,i;    long long a[91];        scanf("%d",&n);     a[0]=0;     a[1]=2;     a[2]=4;    for(i=3;i<=n;i++) a[i]=a[i-1]+a[i-2];    printf("%ld",a[n]);    return 0;}

DFS方法:

注意如果三个连续相等了就得return;

#include <iostream>using namespace std;int ans=0;int n=5;int A[30];void dfs(int dep){    if(dep>2)    {        if(A[dep-1]==A[dep-2] && A[dep-2]==A[dep-3])            return;    }    if(dep==n)    {        ans++;        for(int i=0; i<n; i++)            cout<<A[i]<<" ";        cout<<endl;    }    else for(int i=0; i<2; i++)        {            A[dep]=i;            dfs(dep+1);        }}int main(){    dfs(0);    cout << ans << endl;    return 0;}

当然,dfs写成这样也ok:

void dfs(int dep){    if(dep==n)    {        ans++;        for(int i=0; i<n; i++)            cout<<A[i]<<" ";        cout<<endl;    }    else for(int i=0; i<2; i++)        {            if(!(dep>=2 && i==A[dep-1] && i==A[dep-2]))            {                A[dep]=i;                dfs(dep+1);            }        }}



0 0
原创粉丝点击