您的位置:首页 > 其它

Timus 1009. K-based Numbers

2012-09-27 21:18 183 查看
View Code

/*
dp[i][0] i位数字的数首位为0
dp[i][1] i位数字的数首位为1

*/
#include<stdio.h>
int main()
{
int n,k;
int dp[20][2];
while(~scanf("%d%d",&n,&k))
{
dp[1][0]=1; //只有一个数字的数首位为0那就只有0一个数
dp[1][1]=k-1;//只有一个数字的数首位不为0 ,对于k进制就只有k-1个数,除掉0嘛
for(int i=2;i<=16;i++)
{
dp[i][0]=dp[i-1][1];//i位数的数且首位为0,等于i-1位数的数首位为1的数,
dp[i][1]=dp[i-1][0]*(k-1)+dp[i-1][1]*(k-1);//i位数的数且首位为1(即非0),等于i-1位首位为0数的数乘以首位可以放k-1个数(非0)和首位为 非0乘以k-1
}
printf("%d\n",dp
[1]);
}
}


1009. K-based Numbers

Time Limit: 1.0 second
Memory Limit: 16 MB

Let’s consider K-based numbers, containing exactly N digits. We define a number to be valid if its K-based notation doesn’t contain two successive zeros. For example:

1010230 is a valid 7-digit number;

1000198 is not a valid number;

0001235 is not a 7-digit number, it is a 4-digit number.

Given two numbers N and K, you are to calculate an amount of valid K based numbers, containing N digits.

You may assume that 2 ≤ K ≤ 10; N ≥ 2; N + K ≤ 18.

Input

The numbers N and K in decimal notation separated by the line break.

Output

The result in decimal notation.

Sample

inputoutput
2
10

90

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: