[编程题] nk 爬楼梯2-大数运算
题目
输入输出
Java代码
方法:动态规划
import java.util.*;
import java.math.BigInteger;
public class Main{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int n = s.nextInt();
BigInteger res = dp(n);
System.out.println(res);
}
//动态规划
/*这个题数大的话溢出,所以用bigInteger*/
public static BigInteger dp(int n) {
if(n<=2){return BigInteger.valueOf(1);} //剪枝
//n>=3的情况使用dp处理
BigInteger[] dp = new BigInteger[n+1];
dp[1] = BigInteger.valueOf(1); //n=1的时候只能走1个台阶
dp[2] = BigInteger.valueOf(1); //n=2 的时候只能每次走一个台阶这一种方法
dp[3] = BigInteger.valueOf(2); //n=3 的时候一次3个台阶,一次1个台阶走共2种办法
for(int i=4;i<=n;i++){
dp[i] = dp[i-1].add(dp[i-3]); //相当于dp[i] = dp[i-1]+dp[i-2]);
}
return dp[n];
}
}