B.唱歌(ACM实验室新生赛)

每一行都和上一行有关,就顺序计数上一行连续的数字,按照题意组成下一行

数据太大,打表是不现实的

#include<iostream>
#include<cstdio>
using namespace std;
 int a[35][10005];
 int tmp=0,cnt=0,n;
 int main()
 {
     int x;
     cin>>n;
     a[1][1]=1;
     a[1][0]=tmp=1;
     for(int i=2;i<=n;i++)
     {
         x=0;
         cnt=0;
         for(int j=1;j<=tmp;j++)
         {
             cnt++;
             if(a[i-1][j]==a[i-1][j-1]&&a[i-1][j]!=a[i-1][j+1])
             {
                 a[i][++x]=cnt;
                 a[i][++x]=a[i-1][j];
                 cnt=0;
             }
             else if(j==1&&a[i-1][j]!=a[i-1][j+1])
             {
                 a[i][++x]=cnt;
                 a[i][++x]=a[i-1][j];
                 cnt=0;
   //              printf("+++++++\n");
             }
             else if(a[i-1][j]!=a[i-1][j-1]&&a[i-1][j]!=a[i-1][j+1])
             {
                 a[i][++x]=cnt;
                 a[i][++x]=a[i-1][j];
                 cnt=0;
    //             printf("+++++++\n");
             }
          }
          tmp=x;
          a[i][0]=x;
       }
/*
    for(int i=1;i<=n;i++)
    {
         for(int j=1;j<=a[i][0];j++)
         {
             printf("%d ",a[i][j]);
         }
         printf("\n");
    }
*/
    for(int i=1;i<=a[n][0];i++)
    {
        printf("%d",a[n][i]);
    }
    printf("\n");
    return 0;
}

发表评论