Timus 1009 K-based Numbers (DP)

傳送門: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));
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章