傳送門:http://acm.timus.ru/problem.aspx?space=1&num=1009
題意:
求有N位數字的K進制數且不包含有連續0的數有多少個,必須是有效的 比如0001235 不是一個有效的7位數字,而是4位數字
例如 1001 是無效的 (連續0)
1010 纔是有效的
狀態轉移方程
F(N,K)= (K-1) * [ F(N-1,K)+F(N-2,K) ]
注意的是F(0,K)=1 F(1,K)=K-1
#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include<cstdio>
#include<limits.h>
using namespace std;
long long Best (int n,int k);
long long Dp[17][11];
int main()
{
int n,k;
int i,i2;
//initial
memset(Dp,-1,sizeof(Dp));
for (i=0;i<=10;i++) // n等於0時 其數值都爲1;
{
Dp[0][i]=1;
Dp[1][i]=i-1;
}
while (scanf("%d%d",&n,&k)!=EOF)
{
printf("%d\n",Best(n,k));
}
return 0;
}
long long Best (int n,int k)
{
if (Dp[n][k]!=-1)
return Dp[n][k];
return Dp[n][k]=(k-1)*(Best(n-1,k)+Best(n-2,k));
}