• <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>
            隨筆 - 87  文章 - 279  trackbacks - 0
            <2006年3月>
            2627281234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊(cè)

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 217985
            • 排名 - 117

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            Hie with the Pie
            Time Limit:2000MS  Memory Limit:65536K
            Total Submit:501 Accepted:183

            Description

            The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfortunately, due to cutbacks, they can afford to hire only one driver to do the deliveries. He will wait for 1 or more (up to 10) orders to be processed before he starts any deliveries. Needless to say, he would like to take the shortest route in delivering these goodies and returning to the pizzeria, even if it means passing the same location(s) or the pizzeria more than once on the way. He has commissioned you to write a program to help him.

             

            Input

            Input will consist of multiple test cases. The first line will contain a single integer n indicating the number of orders to deliver, where 1 ≤ n ≤ 10. After this will be n + 1 lines each containing n + 1 integers indicating the times to travel between the pizzeria (numbered 0) and the n locations (numbers 1 to n). The jth value on the ith line indicates the time to go directly from location i to location j without visiting any other locations along the way. Note that there may be quicker ways to go from i to j via other locations, due to different speed limits, traffic lights, etc. Also, the time values may not be symmetric, i.e., the time to go directly from location i to j may not be the same as the time to go directly from location j to i. An input value of n = 0 will terminate input.

             

            Output

            For each test case, you should output a single number indicating the minimum time to deliver all of the pizzas and return to the pizzeria.

             

            Sample Input

            3
            0 1 10 10
            1 0 1 2
            10 1 0 10
            10 2 10 0
            0

             

            Sample Output

            8

             

            Source
            East Central North America 2006

            #include <cstdio>
            #include 
            <memory>

            const int INF = 0x7fffffff;

            int n, d[12][2100];
            int g[12][12];

            void floyd() {
                
            int i, j, k;
                
            for (k=0; k<=n; k++) {
                    
            for (i=0; i<=n; i++) {
                        
            for (j=0; j<=n; j++) {
                            
            if (g[i][k] != -1 && g[k][j] != -1 && (g[i][j] == -1 || g[i][k]+g[k][j] < g[i][j])) {
                                g[i][j] 
            = g[i][k] + g[k][j];
                            }
                        }
                    }
                }
            }

            void solve() {
                
            int i, j, k, bit, t, tmp, one[15], tmpb, ans = INF;
                memset(d, 
            -1, sizeof(d));
                memset(g, 
            -1, sizeof(g));
                
            for (i=0; i<=n; i++) {
                    
            for (j=0; j<=n; j++) {
                        scanf(
            "%d"&g[i][j]);
                    }
                }
                floyd();
                d[
            0][1= 0;
                
            for (i=1; i<=n; i++) {
                    
            for (j=0; j<1<<(n+1); j++) {
                        bit 
            = j; tmp = 0;
                        
            for (k=1; k<=n; k++) {
                            
            if (bit&(1<<k) && bit&1) {
                                one[tmp
            ++= k;
                            }
                        }
                        
            if (tmp != i) continue;
                        
            for (k=0; k<tmp; k++) {
                            tmpb 
            = bit^(1<<one[k]);
                            
            if (d[0][tmpb] != -1 && g[0][one[k]] != -1) {
                                
            if (d[one[k]][bit] == -1 || d[one[k]][bit] > g[0][one[k]] + d[0][tmpb]) {
                                    d[one[k]][bit] 
            = g[0][one[k]] + d[0][tmpb];
                                }
                            }
                            
            for (t=0; t<tmp; t++) {
                                
            if (t == k) continue;
                                
            if (d[one[t]][tmpb] != -1 && g[one[t]][one[k]] != -1) {
                                    
            if (d[one[k]][bit] == -1 || d[one[k]][bit] > g[one[t]][one[k]] + d[one[t]][tmpb]) {
                                        d[one[k]][bit] 
            = g[one[t]][one[k]] + d[one[t]][tmpb];
                                    }
                                }
                            }
                        }
                    }
                }
                
            for (i=0; i<=n; i++) {
                    
            if (d[i][(1<<n+1)-1] != -1 && g[i][0] != -1 && ans > d[i][(1<<n+1)-1]+g[i][0]) ans = d[i][(1<<n+1)-1]+g[i][0];
                }
                printf(
            "%d\n", ans);
            }

            int main() {
                
            while (scanf("%d"&n) != EOF) {
                    
            if (n == 0) break;
                    solve();
                }
                return 
            0;
            }


            posted on 2007-08-03 22:57 閱讀(1275) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ACM題目
            国产国产成人久久精品| 久久这里只有精品久久| 日韩精品久久久久久| 久久99精品国产| 老司机午夜网站国内精品久久久久久久久 | 久久精品黄AA片一区二区三区| 日韩精品久久久久久久电影蜜臀| 69SEX久久精品国产麻豆| 久久人人爽人人爽人人片AV东京热| 亚洲欧洲精品成人久久曰影片 | 91精品国产91久久久久福利| 999久久久免费精品国产| 久久综合五月丁香久久激情| MM131亚洲国产美女久久| 四虎国产精品成人免费久久| 久久国产精品成人免费| 亚洲欧美精品一区久久中文字幕| 久久久久中文字幕| 久久亚洲精品成人AV| 一本一本久久a久久精品综合麻豆| 久久久久久久人妻无码中文字幕爆 | 国产精品久久久久久福利漫画| 一本久久a久久精品综合香蕉| 狠狠色丁香久久综合婷婷| 亚洲女久久久噜噜噜熟女| 日韩精品无码久久一区二区三| 久久国产精品-国产精品| 亚洲AV无码久久精品蜜桃| 欧美久久天天综合香蕉伊| 久久99精品久久久久久齐齐| 久久播电影网| 色综合久久中文综合网| 久久婷婷五月综合97色| 久久久久久国产精品美女| 久久久久亚洲国产| 亚洲天堂久久久| 久久久精品久久久久特色影视| 欧美成a人片免费看久久| 国内精品欧美久久精品| 精品人妻伦一二三区久久| 精品免费久久久久国产一区|