小D的一串数字
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
小D在纸上随便写了两串数字,“23333333”,“0123456789”。第一个串中含有7个重复的相邻的数字,第二个串中不含相邻的重复的数字。小D喜欢第一类串,但是他放低了要求,只要一串数字中含有超过两个重复的相邻的数字,小D就喜欢这串数字。现在他想知道,长度为n的的所有数字串,最多有多少个串会被他喜欢?但是小D是个数学白痴,麻烦你帮他解决这个问题。
Input
输入一个N,(3=<N<=10),代表数字串的长度。
Output
输出一个整数,表示小D最多喜欢多少串。
Sample Input
3
Sample Output
10
Hint
样例中111,222,333,444,555,666,777,888,999,000,这10个串是被小D喜欢的。
#include<stdio.h>
#include<math.h>
long long dp[1200][3];
int a[120];
long long dfs(int len, int num,int same)
{
if(len == 0)
return 1;
if(dp[len][num])
return dp[len][num];
long long ans = 0;
for(int i = 0; i <= 9; i ++)
{
if(num == 1&&i == same)
continue;
if(i == same)
ans += dfs(len-1,num +1,i);
else
ans += dfs(len-1,0,i);
}
dp[len][num] = ans;
return ans;
}
int main()
{
int n;
long long ans;
scanf("%d",&n);
for(int i = 1; i <= n; i ++)
{
a[i] = 9;
}
ans = pow(10,n);
printf("%lld\n",ans - dfs(n,0,-1));
return 0;
}