1. 程式人生 > >HDU 3723 Delta Wave (高精度+calelan數)

HDU 3723 Delta Wave (高精度+calelan數)

system 記事本 精度 big scanner bigint sum wav next

題意:給定一個圖,問你只能向上向下,或者平著走,有多少種方法可以走到最後一個格。

析:首先先考慮,如果沒有平的情況就是calelan數了,現在有平的情況,那麽就枚舉唄,因為數很大,所以要用高精度。

答案應該是sum(C(n, 2*i)*C(n, i)/(i+1)) = a1 + a2 + a3 + ....,然後可以再化簡一下,成為一個遞推式ai = ai-1 * (n-2*i+1)*(n-2*i+2)/(k*(k+1));

這次用記事本寫的,然後沒有測試,直接交的,雖然CE了一發,但還是挺好的。

代碼如下:

import java.util.*;
import java.math.BigInteger;

public class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
	BigInteger mod = BigInteger.TEN.pow(100);
	while(cin.hasNext()){
            int n = cin.nextInt();
	    BigInteger ans = BigInteger.ONE;
	    BigInteger x = BigInteger.ONE;
	    for(int i = 1; i + i <= n; ++i){
		x = x.multiply(BigInteger.valueOf((n-2*i+1)*(n-2*i+2))).divide(BigInteger.valueOf(i*(i+1)));
		ans = ans.add(x);
	    }
	    System.out.println(ans.mod(mod));
	}

    }
}

  

HDU 3723 Delta Wave (高精度+calelan數)