Timus 1009. Kbased Numbers

View Code
 1 /*
 2 dp[i][0] i位数字的数首位为0 
 3 dp[i][1] i位数字的数首位为1 
 4 
 5 */ 
 6 #include<stdio.h>
 7 int main()
 8 {
 9     int n,k;
10     int dp[20][2];
11     while(~scanf("%d%d",&n,&k))
12     {
13         dp[1][0]=1; //只有一个数字的数首位为0那就只有0一个数 
14         dp[1][1]=k-1;//只有一个数字的数首位不为0 ,对于k进制就只有k-1个数,除掉0嘛 
15         for(int i=2;i<=16;i++)
16         {
17             dp[i][0]=dp[i-1][1];//i位数的数且首位为0,等于i-1位数的数首位为1的数,
18             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 
19         }
20         printf("%d\n",dp[n][1]);
21     }
22 }

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
原文地址:https://www.cnblogs.com/1114250779boke/p/2706279.html