HDU2067 小兔的棋盘
生活随笔
收集整理的這篇文章主要介紹了
HDU2067 小兔的棋盘
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
思路: ①dp ?? ②卡特蘭數
①:畫圖,取右下三角形分析,每次都只能向右或向上走。如圖所示:
說明:藍色是初始化, 黑色是行列號,紫色是 該點=左點+下點
所以狀態轉移方程為? dp[i][j] = dp[i][j-1] + dp[i+1][j];
AC代碼:
#include<iostream> #include<cstdio> #include<cstring> using namespace std;long long dp[40][40];int main() {int n, cnt = 1;while(~scanf("%d", &n) && n != -1) {memset(dp, 0, sizeof(dp));//初始化for(int j = 1; j <= n+1; j++) //初始化dp[n+1][j] = 1;for(int i = n; i >= 1; i--) {for(int j = n+2-i; j <= n+1; j++) {dp[i][j] = dp[i+1][j] + dp[i][j-1];}}printf("%d %d %lld\n", cnt++, n, dp[1][n+1]*2);//2倍 爆int} }?②:卡特蘭數
卡特蘭數經典例子:掃描01串,任意位置 保證經過1的個數大于等于0的個數。還有左右括號,進棧出棧問題,這里轉化為卡特蘭數是因為說了不能越過對角線,暗含的意思就是任意位置,向右走的得大于等于向上走的。
AC代碼:
import java.math.BigInteger; import java.util.Scanner;public class Main {static BigInteger catalans[] = new BigInteger[10010];//開數組static BigInteger four = new BigInteger("4");//好用static BigInteger tow = new BigInteger("2");static BigInteger one = new BigInteger("1");public static void init() {//初始化函數catalans[1] = new BigInteger("1");for(int i = 2; i < 10010; i++) {//這里真的酷!catalans[i] = catalans[i-1].multiply(four.multiply(BigInteger.valueOf(i)).subtract(two)).divide(BigInteger.valueOf(i+1));}}public static void main(String[] args) {init();Scanner scanner = new Scanner(System.in);//輸入處理while(scanner.hasNext()) {int n = scanner.nextInt();//輸出也好用System.out.println(catalans[n].divideAndRemainder(new BigInteger("1000000007"))[1]);}} }看到了這位大佬的博客,燃起了我心中的Java ?鏈接
第一個AC的Java代碼,心得:
下載編譯器,JDK,(漢化包沒弄好),知道了如何編寫,提交的時候要改成Main,不要package。
以后大數就用JAVA了。
?
?
?
轉載于:https://www.cnblogs.com/ACMerszl/p/9572958.html
總結
以上是生活随笔為你收集整理的HDU2067 小兔的棋盘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opengl微开发之1-从零開始
- 下一篇: Android acache读后感