• <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
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 217765
            • 排名 - 117

            最新評論

            閱讀排行榜

            評論排行榜

            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) 評論(0)  編輯 收藏 引用 所屬分類: ACM題目
            国产产无码乱码精品久久鸭| 久久精品国产精品亚洲人人| 久久www免费人成看片| 伊人久久精品无码av一区| 国产精品久久久久久福利漫画 | 亚洲精品蜜桃久久久久久| 777米奇久久最新地址| 久久精品中文字幕有码| 亚洲AV无码1区2区久久| 国产AV影片久久久久久 | 99久久久久| 久久精品国产99久久久古代 | 欧美亚洲国产精品久久| 国产精品岛国久久久久| 亚洲性久久久影院| 久久99国产精品久久久| 久久青青草视频| 久久精品国产亚洲Aⅴ香蕉| 久久久久久亚洲精品成人| 色综合久久夜色精品国产| 久久香蕉国产线看观看乱码| 亚洲国产另类久久久精品小说 | 色综合久久综精品| 日产精品久久久久久久| 免费精品国产日韩热久久| 久久久WWW成人| 91久久精品无码一区二区毛片| 久久精品国产精品亚洲毛片| 久久久亚洲欧洲日产国码是AV| 热综合一本伊人久久精品 | 精品久久久无码中文字幕天天| 久久99国产精品尤物| 久久夜色精品国产欧美乱| 久久精品一本到99热免费| 久久久精品久久久久影院| 伊人久久亚洲综合影院| 久久人人青草97香蕉| 久久精品国产亚洲av麻豆图片| 少妇无套内谢久久久久| 久久久久青草线蕉综合超碰 | 久久久久久久久无码精品亚洲日韩|