• <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題目
            嫩草影院久久99| 午夜不卡888久久| 香蕉久久久久久狠狠色| 精品国产99久久久久久麻豆| 久久精品视频网| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 中文字幕人妻色偷偷久久| 久久se精品一区二区| 91精品婷婷国产综合久久| 无码乱码观看精品久久| 久久成人18免费网站| 国产精品青草久久久久福利99| 精品蜜臀久久久久99网站| 亚洲精品乱码久久久久久| 亚洲∧v久久久无码精品| 老司机国内精品久久久久| 国产69精品久久久久9999APGF| 91精品国产91热久久久久福利 | 久久综合中文字幕| 色婷婷综合久久久久中文字幕| 99久久精品毛片免费播放| 久久精品无码一区二区无码 | 久久久国产视频| 91精品国产高清久久久久久91| 囯产极品美女高潮无套久久久| 国产成人精品久久亚洲| 久久成人影院精品777| 久久成人国产精品| 久久久精品国产sm调教网站| 成人午夜精品无码区久久| 久久精品免费全国观看国产| 久久精品二区| 无码久久精品国产亚洲Av影片 | 久久亚洲高清观看| 99久久久精品| 国产精久久一区二区三区| 久久精品国内一区二区三区| 久久久精品国产sm调教网站| 91久久婷婷国产综合精品青草| 久久亚洲精品成人av无码网站| 久久人人爽人人爽人人AV|