• <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>

            pku 2411 Mondriaan's Dream 狀態(tài)壓縮DP

            簡(jiǎn)要題意:
            給出一個(gè)n*m的矩形,要求用1*2的矩形拼出來(lái)(可以旋轉(zhuǎn)),問總共有多少種拼法。

            題解:
            將第i行進(jìn)行狀態(tài)壓縮表示
            (0,0,0,0..0) 0代表向下沒有插頭,1代表向下有插頭
            然后向下一行轉(zhuǎn)移方法就是
            如果當(dāng)前列有插頭,則取消掉插頭;
            如果當(dāng)前列沒有插頭:
            1、如果下一列也沒有插頭,可以水平放一個(gè)小矩形或者豎直放兩個(gè)小矩形,插頭狀態(tài)不變
            2、如果下一列有插頭,則豎直放一個(gè)小矩形,添加兩個(gè)向下的插頭
            注意要用long long
            代碼:
             1 # include <iostream>
             2 # include <cstring>
             3 # define getbit(c,pos) (((c)&(1<<(pos)))>0)
             4 using namespace std;
             5 void add(int code,int now,int m,long long dp[],int num)
             6 {
             7    if(now==m)
             8       dp[code]+=num;
             9    else
            10    {
            11        switch(getbit(code,now))
            12        {
            13           case 1:
            14                add(code-(1<<now),now+1,m,dp,num);
            15                break;
            16           case 0:
            17                if(now!=m-1&&!getbit(code,now+1))
            18                      add(code,now+2,m,dp,num);
            19                add(code+(1<<now),now+1,m,dp,num);
            20                break;
            21        };
            22    }
            23 }
            24 int main()
            25 {
            26     int n,m;
            27     while(true)
            28     {
            29        cin>>n>>m;
            30        if(!n&&!m) break;
            31        long long dp[15][2048];
            32        memset(dp,0,sizeof(dp));
            33        dp[0][0]=1;
            34        for(int i=0;i<n;i++)
            35           for(int j=0;j<(1<<m);j++)
            36             if(dp[i][j])
            37                  add(j,0,m,dp[i+1],dp[i][j]);
            38        cout<<dp[n][0]<<endl;
            39     }
            40     return 0;
            41 }
            42 



            posted on 2010-11-25 19:18 yzhw 閱讀(286) 評(píng)論(0)  編輯 收藏 引用 所屬分類: DP

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            統(tǒng)計(jì)系統(tǒng)

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            国产福利电影一区二区三区久久老子无码午夜伦不 | 久久精品国产亚洲AV香蕉| 久久精品一区二区影院| 欧美一级久久久久久久大片| 一本久久知道综合久久| 亚洲午夜精品久久久久久人妖| 欧美激情精品久久久久久久| 午夜精品久久久久久中宇| 国内精品久久九九国产精品| 久久99精品久久久久久噜噜| 久久久久久午夜成人影院| 久久中文字幕视频、最近更新 | 久久亚洲精品中文字幕| 欧美亚洲国产精品久久蜜芽| 久久精品亚洲中文字幕无码麻豆| 东京热TOKYO综合久久精品| 大香伊人久久精品一区二区| 国内精品欧美久久精品| 亚洲va久久久噜噜噜久久天堂| 久久r热这里有精品视频| 日本久久久久久久久久| 99久久伊人精品综合观看| 久久夜色精品国产欧美乱| 久久精品无码一区二区日韩AV| 久久香综合精品久久伊人| 久久久噜噜噜久久中文字幕色伊伊 | 一本久久免费视频| 中文精品99久久国产| 亚洲国产精品久久久久| 久久精品国产亚洲AV香蕉| 亚洲va久久久久| 青青草原综合久久大伊人| 久久国产成人亚洲精品影院| 99久久精品九九亚洲精品| 97久久精品无码一区二区| 久久久久夜夜夜精品国产| 久久亚洲精品无码AV红樱桃| 久久久久AV综合网成人| 亚洲精品国产字幕久久不卡 | 中文无码久久精品| 狠狠综合久久AV一区二区三区|