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
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
input | output |
---|---|
2 10 |
90 |