小D的一串数字(简单DP)

小D的一串数字
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description

小D在纸上随便写了两串数字,“23333333”,“0123456789”。第一个串中含有7个重复的相邻的数字,第二个串中不含相邻的重复的数字。小D喜欢第一类串,但是他放低了要求,只要一串数字中含有超过两个重复的相邻的数字,小D就喜欢这串数字。现在他想知道,长度为n的的所有数字串,最多有多少个串会被他喜欢?但是小D是个数学白痴,麻烦你帮他解决这个问题。
Input

输入一个N,(3= Output

输出一个整数,表示小D最多喜欢多少串。
Sample Input

3

Sample Output

10

Hint

样例中111,222,333,444,555,666,777,888,999,000,这10个串是被小D喜欢的。

#include 
int dp[50][50];

int main()
{
    int n;
    for(int i=0;i<10;i++)
        dp[1][i]=1;
    scanf("%d",&n);
    for(int i=2;i<=n;i++)
        for(int j=0;j<10;j++){
            for(int k=0;k<10;k++)
                if(j!=k)dp[i][j]+=dp[i-1][k]+dp[i-1][k+10];
            dp[i][j+10]=dp[i-1][j];
            dp[i][j+20]=dp[i-1][j+10]+dp[i-1][j+20]*10;
        }
    int ans=0;
    for(int i=0;i<10;i++)
        ans+=dp[n][i+20];
    printf("%d\n",ans);
}

你可能感兴趣的:(基本操作)