程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 小兔的棋盤(hdu2067),小兔棋盤hdu2067

小兔的棋盤(hdu2067),小兔棋盤hdu2067

編輯:關於C語言

小兔的棋盤(hdu2067),小兔棋盤hdu2067


小兔的棋盤

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7547    Accepted Submission(s): 4020


Problem Description 小兔的叔叔從外面旅游回來給她帶來了一個禮物,小兔高興地跑回自己的房間,拆開一看是一個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點(0,0)走到終點(n,n)的最短路徑數是C(2n,n),現在小兔又想如果不穿越對角線(但可接觸對角線上的格點),這樣的路徑數有多少?小兔想了很長時間都沒想出來,現在想請你幫助小兔解決這個問題,對於你來說應該不難吧!  

 

Input 每次輸入一個數n(1<=n<=35),當n等於-1時結束輸入。  

 

Output 對於每個輸入數據輸出路徑數,具體格式看Sample。  

 

Sample Input 1 3 12 -1  

 

Sample Output 1 1 2 2 3 10 3 12 416024    

題意:從(0,0)---(n,n)問你有幾條路徑;不穿過對角線。

 

思路:  以對角線分開,上三角和下三角對稱;

轉載請注明出處:尋找&星空の孩子 

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2067

 

 

 1 #include<stdio.h>
 2 #define LL __int64
 3 LL num[36][36]={0};
 4 void init()
 5 {
 6     for(int i=1;i<=35;i++)
 7     {
 8         num[i][0]=1;
 9         for(int j=1;j<i;j++)
10             num[i][j]=num[i][j-1]+num[i-1][j];
11         num[i][i]=num[i][i-1];
12     }
13 }
14 int main()
15 {
16     int n,ca=1;
17     init();
18     while(scanf("%d",&n)!=EOF)
19     {
20         if(n==-1) break;
21         printf("%d %d %I64d\n",ca++,n,2*num[n][n]);
22     }
23     return 0;
24 
25 }

 

 

 

 

附以前的代碼

#include <stdio.h> 
int main()  
{  
    int i,j;  
    __int64 a[36] = {1};  
    __int64 b[36] = {0};  
    for (i=1;i<36;i++)  
    {  
        for(j=1;j<i;j++)  
            a[j]=a[j]+a[j-1];  
        b[i]=a[i]=a[i-1];  
    }  
  
    for(j=1;scanf("%d",&i),i;j++)
    {
        if(i==-1)
            break;
        else
            printf("%d %d %I64d\n",j,i,2*b[i]);
    }
    return 0;  
}  

發現現在做以前的題,想到的思路有些不同。。。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved