• <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://www.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)

            隨筆檔案

            相冊

            搜索

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            国产美女亚洲精品久久久综合| 东京热TOKYO综合久久精品| 精品国产福利久久久| 久久久女人与动物群交毛片 | 中文字幕亚洲综合久久2| 久久丫精品国产亚洲av不卡| 久久天天躁夜夜躁狠狠| 久久久久久毛片免费看| 久久性精品| 综合久久一区二区三区 | 99久久久精品免费观看国产| 少妇内射兰兰久久| 久久99亚洲网美利坚合众国| 97久久国产亚洲精品超碰热| 国产精品99久久久久久宅男| 国产福利电影一区二区三区久久老子无码午夜伦不 | 无码8090精品久久一区| 人妻少妇精品久久| 久久精品亚洲AV久久久无码| 午夜精品久久久久久99热| 久久久久亚洲av无码专区导航| 国产欧美久久一区二区| 情人伊人久久综合亚洲| 色婷婷综合久久久久中文字幕 | 99热精品久久只有精品| 久久久WWW成人免费精品| 奇米影视7777久久精品人人爽| 久久无码人妻一区二区三区午夜| 国产91色综合久久免费分享| 久久久不卡国产精品一区二区| 伊人久久综合无码成人网| 久久99国产精品久久99果冻传媒 | 狠狠色丁香婷综合久久| 色播久久人人爽人人爽人人片aV | 久久91精品国产91久久麻豆| 日韩AV毛片精品久久久| 久久久久综合网久久| 久久人人爽人人爽人人片av麻烦| 97久久超碰成人精品网站| 亚洲日本va午夜中文字幕久久| 72种姿势欧美久久久久大黄蕉|