• <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 PKU 3420 Quad Tiling 很難的動態規劃,需要靈活應用矩陣`

            http://acm.pku.edu.cn/JudgeOnline/problem?id=3420
            好幾個人都問我這道題,可是我自己也不會做,真是慚愧啊...太落后了..別人都飛機大炮了,我還在小米加步槍.... 太羞愧了 ..

            不過還好,除了Felicia的程序以外(http://m.shnenglu.com/felicia/archive/2007/10/08/33740.html),我還讀了兩個牛人的程序.

            一個是Ricky_
             1#include "stdio.h"
             2int matrix[4][4= {0,0,0,-1},
             3                     {1,0,0,1},
             4                     {0,1,0,5},
             5                     {0,0,1,1}}
            ;
             6int n, m;
             7int tmp[4][4], quo[4][4], ans[4];
             8
             9void MatrixCopy( int to[][4], int from[][4] ){
            10     int i, j;
            11     for ( i = 0; i < 4; i++ ){
            12         for ( j = 0; j < 4; j++ ){
            13             to[ i ][ j ] = from[ i ][ j ];
            14         }

            15     }
                 
            16}

            17void MatrixMulti( int a[][4], int b[][4], int c[][4] ){
            18     int i, j, k, t;
            19     for ( i = 0; i < 4; i++ ){
            20         for ( j = 0; j < 4; j++ ){
            21             t = 0;
            22             for ( k = 0; k < 4; k++ ){
            23                 t = ( t + a[ i ][ k ] * b[ k ][ j ] ) % m;
            24             }

            25             c[ i ][ j ] = t;
            26         }

            27     }
                 
            28}

            29void MatrixPow( int n ){
            30     if ( n == 1 ) return;    
            31     MatrixPow( n / 2 );
            32     MatrixMulti( quo, quo, tmp );
            33     if ( n % 2 ){
            34          MatrixMulti( tmp, matrix, quo );   
            35     }
             else{
            36          MatrixCopy( quo, tmp );         
            37     }

            38}

            39
            40int main(){
            41    int i, j, t;
            42    while ( scanf("%d%d"&n, &m ) && n ){
            43          ans[0]=1;ans[1]=1;ans[2]=5;ans[3]=11;
            44          if ( n < 4 ){
            45               printf("%d\n", ans[ n ] % m );
            46               continue;   
            47          }
                  
            48          MatrixCopy( quo, matrix );
            49          MatrixPow( n - 3 );
            50          t = 0;
            51          for ( i = 0; i < 4; i++ ){
            52              t += ans[ i ] * quo[ i ][ 3 ];
            53          }

            54          printf("%d\n", t % m );
            55    }

            56}

            57


            還有一個我讀過的所有程序中最新穎的(當然也可能是我孤陋寡聞了),讓人覺得神清氣爽的! 黃強寫的程序!
             1#include <stdio.h>
             2#include <memory.h>
             3int n,MOD;
             4class Mat{
             5public:
             6 int v[4][4];
             7 Mat(int x){
             8  memset(v,0,sizeof(v));
             9  if (x==1)
            10   v[0][0]=v[1][1]=v[2][2]=v[3][3]=1
            11  else if (x==2){
            12   v[0][0]=1; v[0][1]=5; v[0][2]=1; v[0][3]=-1;
            13   v[1][0]=v[2][1]=v[3][2]=1;
            14  }

            15 }

            16 Mat friend operator * (const Mat &A,const Mat &B){   //矩陣相乘
            17  Mat C(0);
            18  int i,j,k;
            19  for (i=0;i<4;i++)
            20   for (j=0;j<4;j++{
            21    for (k=0;k<4;k++)
            22     C.v[i][j]=(C.v[i][j]+A.v[i][k]*B.v[k][j]%MOD)%MOD;
            23    if (C.v[i][j]<0) C.v[i][j]+=MOD;
            24   }

            25  }

            26  return C;
            27 }

            28}
            ;
            29void solve() {
            30 int ans;
            31 Mat V(1),B(2);
            32 while (n) {
            33  if (n&1) V=V*B; //奇數
            34  n>>=1;          //除以2
            35  B=B*B;   
            36 }

            37 ans=11*V.v[3][0]+5*V.v[3][1]+V.v[3][2]+V.v[3][3];
            38 ans%=MOD;
            39 printf("%d\n",ans);
            40}

            41int main(){
            42 while (scanf("%d%d",&n,&MOD)!=EOF && (n+MOD))
            43  solve();
            44 return 0;
            45}

            牛啊~~~
            記錄下來,沒事就看看.這才是真正的ACM/ICPC!

            posted on 2007-11-15 14:03 流牛ζ木馬 閱讀(1594) 評論(2)  編輯 收藏 引用

            評論

            # re: ACM PKU 3420 Quad Tiling 很難的動態規劃,需要靈活應用矩陣` 2007-11-18 18:33 Run&Run

            看不懂.能解釋下嗎?  回復  更多評論   

            # re: ACM PKU 3420 Quad Tiling 很難的動態規劃,需要靈活應用矩陣` 2007-12-11 11:00 ACLover

            Ricky的程序不行啊505464 29298
            521871 29931
            526306 19184
            511851 6808
            520370 8044
            507265 21718
            都有錯啊  回復  更多評論   

            <2007年11月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            導航

            統計

            公告

            MY Email/MSN :mars1021@163.com QQ : 27402040 流牛ζ木馬

            常用鏈接

            留言簿(6)

            隨筆檔案

            相冊

            搜索

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            日本欧美国产精品第一页久久| 91精品国产高清久久久久久国产嫩草| 日本三级久久网| AA级片免费看视频久久| 久久亚洲中文字幕精品一区四 | 狠狠色丁香婷婷综合久久来来去| 久久久91人妻无码精品蜜桃HD| 99久久国产亚洲综合精品| 国产成人久久AV免费| 国产精品欧美久久久久天天影视| 怡红院日本一道日本久久 | 囯产精品久久久久久久久蜜桃| 久久久久av无码免费网| 秋霞久久国产精品电影院| 久久精品无码专区免费| 久久久久久久97| 久久精品国产色蜜蜜麻豆| 精品久久亚洲中文无码| 久久久精品国产亚洲成人满18免费网站| 亚洲精品第一综合99久久| 国産精品久久久久久久| 国内精品伊人久久久久av一坑| 久久亚洲AV成人无码软件| 热re99久久精品国产99热| 欧美大香线蕉线伊人久久| 中文精品久久久久人妻| 久久av免费天堂小草播放| 国产一区二区三区久久精品| 久久久国产精华液| 一级a性色生活片久久无| 久久久久久久久久免免费精品| 四虎国产精品免费久久久| 精品久久久久久久无码| 少妇内射兰兰久久| 综合久久国产九一剧情麻豆| 亚洲精品国产第一综合99久久| 久久久久久免费视频| 久久精品卫校国产小美女| 亚洲AV无码久久精品狠狠爱浪潮 | 狠狠综合久久AV一区二区三区| 人妻中文久久久久|