• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACM___________________________

            ______________白白の屋
            posts - 182, comments - 102, trackbacks - 0, articles - 0
            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(24)

            隨筆分類(332)

            隨筆檔案(182)

            FRIENDS

            搜索

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋

            題目地址:
                     http://acm.hdu.edu.cn/showproblem.php?pid=2067
            題目描述:
            Problem Description
            小兔的叔叔從外面旅游回來給她帶來了一個禮物,小兔高興地跑回自己的房間,拆開一看是一個棋盤,小兔有所失望。不過沒過幾天發現了棋盤的好玩之處。從起點(
            00)走到終點(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

            題目分析:
            假設小兔的棋盤是 8 × 8 的 ( 當然你也可以假設是其他 )。如下圖:
            箭頭方向表示從該格子下一步能去的格子。因為不能穿越對角線,所有對角線上的格子只有進去的箭頭,沒有出來的箭頭。


            觀察上圖你就可以發現,其實這是一張關于對角線對稱的圖。所有我們只要求一個方向的值,然后乘以2即可。
            我們就拿下三角來考慮。不難發現,所有在0列上的格子,路徑數都是 1 (只能從上面過來)。
            而其他格子則都是由上、左兩個方向過來,即:f(i, j) = f(i - 1, j) + f(i, j - 1);
            另外f(i, i) = f(i, j - 1)  或者 f(i, i) = f( i-1, j ) ;

            代碼如下:
            MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋

            #include
            <iostream>
            using namespace std;
            typedef 
            long long int64;
            int64 f[
            37][37];
            int main()
            {
                
            int ca=0;
                
            int N;
                
            while ( cin >> N , N + 1 )
                {
                    
            ++ ca;
                    
            for ( int i = 1;i <= N; ++ i )
                    {
                          f[
            0][i] = 1;
                    }
                    
            for ( int i = 1; i < N; ++ i )
                    {
                          
            for ( int j = i; j <= N; ++ j )
                          {
                                
            if ( i == j )
                                {
                                     f[i][j] 
            = f[i-1][j];
                                }
                                
            else
                                {
                                     f[i][j] 
            = f[i-1][j] + f[i][j-1];
                                }
                          }
                    }
                    printf(
            "%d %d %I64d\n", ca, N, 2 * f[N-1][N] );
                }
                
            return 0;
            }

            另外看別人的解題報告說這個是卡特蘭數 ( 詳細請查看 <<卡特蘭數>>  ), 其實現在還不理解, 分析如下:
            Catalan數。。
            令h(
            1)=1,h(0)=1,catalan數滿足遞歸式:
              h(n)
            = h(0)*h(n-1)+h(1)*h(n-2+  + h(n-1)h(0) (其中n>=2)
              另類遞歸式:
              h(n)
            =((4*n-2)/(n+1))*h(n-1);
              該遞推關系的解為:
              h(n)
            =C(2n,n)/(n+1) (n=1,2,3,…)

            附卡特蘭代碼:
            #include<stdio.h>
            int main()
            {
                __int64 a[
            37][37]={0};
                
            int i,j,n,t=0;
                a[
            0][0]=0;
                a[
            0][1]=1;
                a[
            1][1]=2;
                
            for(i=2;i<37;i++)
                {
                    a[i][
            0]=1;
                    
            for(j=1;j<i-1;j++)
                        a[i][j]
            =a[i][j-1]+a[i-1][j];
                    a[i][i
            -1]=a[i][i-2]+a[i-1][i-1]/2;
                    a[i][i]
            =2*a[i][i-2]+a[i-1][i-1];
             
                }
                
            while(scanf("%d",&n)&&n!=-1)
                {
                    printf(
            "%d %d %I64d\n",++t,n,a[n][n]);
                }
                
            return 0;
            }
            日韩亚洲国产综合久久久| 九九99精品久久久久久| 精品国产乱码久久久久软件| 无码专区久久综合久中文字幕| 996久久国产精品线观看| 青青久久精品国产免费看| 无码人妻精品一区二区三区久久久 | 久久AV无码精品人妻糸列| 久久久久亚洲av综合波多野结衣| 久久久久久久亚洲Av无码| 久久精品亚洲福利| 丰满少妇高潮惨叫久久久| 久久亚洲AV无码精品色午夜| 亚洲成色999久久网站| 国产激情久久久久久熟女老人 | 国产香蕉久久精品综合网| 久久香蕉综合色一综合色88| 精品综合久久久久久98| 久久久久国色AV免费观看| 91精品日韩人妻无码久久不卡| 久久久久av无码免费网| 亚洲精品无码专区久久同性男 | 久久婷婷五月综合成人D啪| 久久久精品国产Sm最大网站| 精品久久久无码人妻中文字幕豆芽| 超级碰碰碰碰97久久久久| 武侠古典久久婷婷狼人伊人| 久久久久久久国产免费看| 99久久人人爽亚洲精品美女| 久久精品无码午夜福利理论片| 狠狠色综合网站久久久久久久高清 | 99精品国产综合久久久久五月天 | 亚洲国产成人久久一区久久| 久久性生大片免费观看性| 久久这里有精品视频| 日韩十八禁一区二区久久| 久久精品综合网| 伊人久久大香线焦AV综合影院| 国产A级毛片久久久精品毛片| 中文字幕热久久久久久久| 久久99久久99精品免视看动漫|