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

            misschuer

            常用鏈接

            統(tǒng)計(jì)

            積分與排名

            百事通

            最新評論

            hdu 1584 蜘蛛牌

            //狀態(tài)壓縮 和hdu 1074 Doing Homework 幾乎一樣

            #include 
            <iostream>
            #define MAXN 12
            using namespace std;

            struct Node {
                
                
            int val;
                
            int r[MAXN];
            };


            Node dp[
            1<<MAXN], q;
            bool f[1<<MAXN];
            int n = 10, num;

            void res() {
                
                dp[ 
            0 ].val = 0;
                memset(f, 
            falsesizeof(f));
                f[ 
            0 ] = true;
                
                
            int cnt = (1 << (n - 1)) - 1;
                
                
            for(int j = 0; j < cnt; ++ j) {
                    
                    
            for(int i = 0; i < n - 1++ i) {
                        
                        
            int val = 1 << i;
                        
            if(!(val & j)) {
                            
                            
            int tmp = val | j;
                            
                            
            for(int k = 0; k < n; ++ k) {
                                
                                q.r[ k ] 
            = dp[ j ].r[ k ];
                            }
                            
                            
            int tt = abs(q.r[ i ] - q.r[i + 1]);
                            
                            
            if(tt == 0continue;
                            
                            
            if(f[ tmp ]) {
                                
                                
            if(dp[ j ].val + tt < dp[ tmp ].val) {
                                    
                                    q.val 
            = dp[ j ].val + tt;
                                    
            int cc = q.r[ i ];
                                    
            for(int g = 0; g < n; ++ g) {
                                        
                                        
            if(q.r[ g ] == cc) {
                                            
                                            q.r[ g ] 
            = q.r[i + 1];
                                        }
                                    }
                                    dp[ tmp ] 
            = q;
                                    
            //    printf("t %d %d\n", tmp, dp[ tmp ].val);
                                }
                            }
                            
            else {
                                
                                f[ tmp ] 
            = true;
                                q.val 
            = dp[ j ].val + tt;
                                
            int cc = q.r[ i ];
                                
            for(int g = 0; g < n; ++ g) {
                                    
                                    
            if(q.r[ g ] == cc) {
                                        
                                        q.r[ g ] 
            = q.r[i + 1];
                                    }
                                }
                                dp[ tmp ] 
            = q;
                                
            //printf("f %d %d\n", tmp, dp[ tmp ].val);
                            }
                        }
                    }
                }
                printf(
            "%d\n", dp[ cnt ].val);
            }

            int main() {
                
                
            int test;
                scanf(
            "%d"&test);
                
                
            while(test --) {
                    
                    
            for(int i = 0; i < n; ++ i) {
                        
                        scanf(
            "%d"&num);
                        dp[ 
            0 ].r[num - 1= i;
                    }
                    res();
                }
                
            return 0;
            }

            posted on 2011-03-17 19:23 此最相思 閱讀(295) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久99精品久久久久久齐齐| 久久精品国产免费一区| 午夜精品久久影院蜜桃| 午夜精品久久久久久影视777| 精品久久久无码21p发布| 99久久人妻无码精品系列| 99久久伊人精品综合观看| 久久婷婷色综合一区二区| 99久久婷婷国产综合亚洲| 欧美激情精品久久久久久久九九九| AV无码久久久久不卡蜜桃| 久久精品www| 久久精品国产乱子伦| 国产精品成人久久久久三级午夜电影 | 色偷偷888欧美精品久久久| 超级碰久久免费公开视频| 久久亚洲sm情趣捆绑调教| 久久亚洲国产欧洲精品一| yy6080久久| 午夜精品久久影院蜜桃| 情人伊人久久综合亚洲| 亚洲日本va中文字幕久久| 日本亚洲色大成网站WWW久久| 97r久久精品国产99国产精| 久久久久久精品无码人妻| 久久久久亚洲AV无码去区首| 岛国搬运www久久| 精品乱码久久久久久久| 亚洲精品乱码久久久久久| 伊人久久大香线焦AV综合影院 | 亚洲另类欧美综合久久图片区| 久久线看观看精品香蕉国产| 麻豆一区二区99久久久久| 一本色综合网久久| 亚洲色欲久久久综合网| av色综合久久天堂av色综合在| 久久精品卫校国产小美女| 久久亚洲国产精品成人AV秋霞| 久久无码AV一区二区三区| 久久免费视频1| 亚洲av日韩精品久久久久久a|