1012. K-based Numbers. Version 2
Time limit: 0.5 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:
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 ≤ 1800.
Input
The numbers
N and
K in decimal notation separated by the line break.
Output
The result in decimal notation.
Sample
|
转移方程和ural 1009 一样。 不过数据加大了。。 这样会导致溢出。 java大法好!
<pre name="code" class="java">import java.math.BigInteger;
import java.util.Scanner;
public class Main {
static Scanner s = new Scanner(System.in);
static BigInteger dp[][] = new BigInteger[1900][3];
public static void main(String[] args) {
int n = s.nextInt();
BigInteger k = s.nextBigInteger();
dp[1][0] = k.subtract(new BigInteger("1"));
dp[1][1] = new BigInteger("0");
for(int i=2; i<=n; i++){
dp[i][0] = dp[i-1][1].add(dp[i-1][0]).multiply(dp[1][0]);
dp[i][1] = dp[i-1][0];
}
BigInteger res = dp[n][0].add(dp[n][1]);
System.out.println(res);
}
}