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.
InputThe numbers N and K in decimal notation separated by the line break.
OutputThe 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);
}
}