[编程题] nk [爬楼梯2-大数运算]

[编程题] nk 爬楼梯2-大数运算

题目

image-20200730163059472

输入输出

image-20200730163139025

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];
     }
}
 
posted @ 2020-07-30 16:36  北鼻coder  阅读(155)  评论(0编辑  收藏  举报