青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

糯米

TI DaVinci, gstreamer, ffmpeg
隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
數據加載中……

POJ 3123 Ticket to Ride 動態規劃+Minimal Steiner Tree

這題絕對不是蓋的。
題目大意是:
給出一個無向圖,和四對數據。每對數據分別為圖中的兩個點。
要求添加一些邊,使每對點都能連通,讓總邊權最小。

首先考慮一個子問題:指定一些點,添加一些邊,讓它們連通,并且總邊權最小。
這個問題就是Minimal Steiner Tree問題,解決方法可以見這里
這問題不是蓋的,它居然是NP完全問題。。
汗。。今天終于在POJ見識到啥叫NP完全問題了。。

大的問題可以分為多個子問題。可以枚舉所有pair的連接狀況。
比如說 {1和2鏈接,3和4鏈接} 或者 {1獨立,2獨立,3和4鏈接} 等等
一共有15種情況。分別為
    // 1,1,1,1
    {{1},{2},{3},{4}},
    // 1,1,2
    {{1,2},{3},{4}},
    {{1,3},{2},{4}},
    {{1,4},{2},{3}},
    {{2,3},{1},{4}},
    {{2,4},{1},{3}},
    {{3,4},{1},{2}},
    // 2,2
    {{1,2},{3,4}},
    {{1,3},{2,4}},
    {{1,4},{2,3}},
    // 1,3
    {{1,2,3},{4}},
    {{1,2,4},{3}},
    {{1,3,4},{2}},
    {{2,3,4},{1}},
    // 4
    {{1,2,3,4}},

其中有一些是重復的,就可以開一個數組保存下來。
貼一個我的程序。當然,這個是TLE的。。官方的數據需要將近一分鐘才能跑完。
另外一個標程運行飛快,用得是更好的方法,點這里


#include <stdio.h>
#include 
<string.h>
#include 
<algorithm>
#include 
<cmath>

using namespace std;

char names[32][32];
int N, M;
int W[32][32];
const int INF = 10032*32;
int pairs[4];
int dp[256][2], dn;

int getcity(char *s)
{
    
int i;
    
for (i = 0; i < N; i++)
        
if (!strcmp(s, names[i]))
            
break;
    
return i;
}

int prim(int mask)
{
    
int i, j, mc, mi, a, c, t;

    c 
= 0;
    
for (i = 0; i < N; i++
        
if (mask & (1 << i)) {
            a 
= 1 << i;
            c
++;
        }

    t 
= 0;
    
while (--c) {
        mc 
= INF;
        
for (i = 0; i < N; i++)
            
if (a & (1 << i)) 
                
for (j = 0; j < N; j++)
                    
if (((mask ^ a) & (1 << j)) && W[i][j] < mc) {
                        mc 
= W[i][j];
                        mi 
= j;
                    }
        
if (mc == INF)
            
return INF;
        a 
|= 1 << mi;
        t 
+= mc;
    }

    
return t;
}

int K;

int dfs(int start, int mask, int n)
{
    
int i, r;

    
if (n >= K - 2)
        
return prim(mask);
    
    r 
= prim(mask);
    
for (i = start; i < N; i++
        
if ((1 << i) & ~mask) 
            r 
= min(r, dfs(i+1, mask|(1<<i), n+1));

    
return r;
}

int minicost(int mask)
{
    
int i, r;

    
for (i = 0; i < dn; i++)
        
if (mask == dp[i][0])
            
return dp[i][1];

    K 
= 0;
    
for (i = 0; i < N; i++)
        
if (mask & (1 << i))
            K
++;
    
    r 
= dfs(0, mask, 0);

    dp[dn][
0= mask;
    dp[dn][
1= r;
    dn
++;
    
return r;
}

int stats[15][8][8= {
    
// 1,1,1,1
    {{1},{2},{3},{4}},
    
// 1,1,2
    {{1,2},{3},{4}},
    {{
1,3},{2},{4}},
    {{
1,4},{2},{3}},
    {{
2,3},{1},{4}},
    {{
2,4},{1},{3}},
    {{
3,4},{1},{2}},
    
// 2,2
    {{1,2},{3,4}},
    {{
1,3},{2,4}},
    {{
1,4},{2,3}},
    
// 1,3
    {{1,2,3},{4}},
    {{
1,2,4},{3}},
    {{
1,3,4},{2}},
    {{
2,3,4},{1}},
    
// 4
    {{1,2,3,4}},
};

int main()
{
    
int i, j, k, a, b, c, ans;
    
char sa[32], sb[32];

    
while (scanf("%d%d"&N, &M), N) {
        
for (i = 0; i < N; i++)
            scanf(
"%s", names[i]);
        
for (i = 0; i < N; i++)
            
for (j = 0; j < N; j++)
                W[i][j] 
= INF;
        
for (i = 0; i < M; i++) {
            scanf(
"%s%s%d", sa, sb, &c);
            a 
= getcity(sa);
            b 
= getcity(sb);
            W[a][b] 
= W[b][a] = min(W[a][b], c);
        }
        
for (i = 0; i < 4; i++) {
            scanf(
"%s%s", sa, sb);
            a 
= getcity(sa);
            b 
= getcity(sb);
            pairs[i] 
= (1 << a) | (1 << b);
        }

        
// floyd
        for (k = 0; k < N; k++)
            
for (i = 0; i < N; i++)
                
for (j = 0; j < N; j++)
                    W[i][j] 
= min(W[i][k] + W[k][j], W[i][j]);

        dn 
= 0;
        ans 
= INF;
        
for (i = 0; i < 15; i++) {
            c 
= 0;
            
for (j = 0; stats[i][j][0]; j++) {
                a 
= 0;
                
for (k = 0; stats[i][j][k]; k++)
                    a 
|= pairs[stats[i][j][k] - 1];
                c 
+= minicost(a);
            }
            ans 
= min(ans, c);
        }

        printf(
"%d\n", ans);
    }
    
return 0;
}



 

posted on 2011-02-24 00:44 糯米 閱讀(1109) 評論(0)  編輯 收藏 引用 所屬分類: POJ

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品每日更新| 亚洲国产精品久久91精品| 亚洲高清久久| 欧美中文字幕久久| 亚洲欧美一区二区三区极速播放| 在线一区观看| 亚洲欧美在线aaa| 久久精品亚洲国产奇米99| 国产综合av| 国产手机视频一区二区| 国模大胆一区二区三区| 最近中文字幕日韩精品| 欧美电影免费观看高清| 欧美成人第一页| 牛人盗摄一区二区三区视频| 欧美成人日本| 99re6这里只有精品| 亚洲影视九九影院在线观看| 久久精品国产96久久久香蕉| 老**午夜毛片一区二区三区| 欧美日韩三级视频| 国模精品娜娜一二三区| 99精品视频免费观看| 欧美一区二区三区男人的天堂 | 国产精品久久久久久五月尺| 国产精品免费一区豆花| 亚洲高清自拍| 亚洲一区二区三区午夜| 久久深夜福利免费观看| 亚洲日本中文字幕免费在线不卡| 亚洲精品乱码久久久久久按摩观| 亚洲欧美变态国产另类| 欧美成人免费全部观看天天性色| 国模叶桐国产精品一区| 久久九九有精品国产23| 国产精品成人观看视频国产奇米| 国产亚洲一区精品| 亚洲视频一区二区在线观看| 久久久夜精品| 亚洲天堂久久| 欧美理论电影在线播放| 国产婷婷色一区二区三区| 一本色道久久综合狠狠躁篇的优点 | 亚洲素人在线| 麻豆久久婷婷| 在线一区二区三区四区| 久久久久久午夜| 国产区欧美区日韩区| 国产精品99久久久久久久久久久久 | 欧美日本亚洲视频| 亚洲黄色成人久久久| 久久九九免费视频| 一本色道久久综合| 欧美大胆人体视频| 国产一区亚洲一区| 欧美专区18| 亚洲一区国产| 国产精品福利网| 在线不卡中文字幕| 亚洲区中文字幕| 国产伦精品一区二区三区免费迷| 亚洲国产精品一区二区第一页 | 久久久久久久网| 国产色婷婷国产综合在线理论片a| 99精品久久免费看蜜臀剧情介绍| 欧美电影在线观看完整版| 久久天天狠狠| 亚洲国产成人久久综合一区| 久久久久久久999精品视频| 亚洲综合日韩中文字幕v在线| 欧美黄色一级视频| 一区二区三区视频在线| 亚洲美女精品成人在线视频| 欧美日韩国产一区二区三区地区| 99精品久久久| 亚洲一区二区免费在线| 国产欧美视频一区二区三区| 久久美女艺术照精彩视频福利播放| 欧美一区二区三区免费视| 国产一区二区三区久久精品| 另类亚洲自拍| 欧美国产精品va在线观看| 亚洲美女网站| 亚洲一区国产视频| 一区二区三区在线视频免费观看| 欧美激情精品久久久久久蜜臀 | 亚洲高清视频一区| 免费亚洲电影| 亚洲自拍偷拍网址| 欧美在现视频| 亚洲欧美另类国产| 亚洲国产另类久久久精品极度| 日韩视频永久免费| 一区二区高清在线观看| 亚洲自拍偷拍视频| 先锋影音国产精品| 在线日韩中文字幕| 欧美激情一区二区三区在线视频| 久久―日本道色综合久久| 最新中文字幕亚洲| 欧美高清自拍一区| 国产精品第13页| 久久久久久成人| 欧美成人一区二区三区在线观看| 亚洲电影免费观看高清完整版在线| 91久久久久久久久久久久久| 国产精品久久久久久av福利软件 | 亚洲第一综合天堂另类专| 久久激情婷婷| 国产精品亚洲视频| 亚洲国语精品自产拍在线观看| 国产精品狼人久久影院观看方式| 亚洲专区一二三| 久久久久久欧美| 狠狠色狠狠色综合人人| 欧美成人午夜激情在线| 欧美久久一级| 久久亚洲不卡| 国产精品女人网站| 日韩视频免费在线观看| 亚洲国产精品激情在线观看| 午夜久久资源| 国产精品99久久久久久久女警| 久久九九免费视频| 欧美一区二区三区视频| 欧美日韩国产综合一区二区| 久久综合中文| 国产一区视频在线观看免费| 艳女tv在线观看国产一区| 亚洲七七久久综合桃花剧情介绍| 午夜视频一区| 亚洲视频香蕉人妖| 欧美精品一区二区久久婷婷| 欧美大片在线观看一区二区| 黄色成人在线观看| 久久成人18免费网站| 久久久久国产免费免费| 国产欧美精品va在线观看| 亚洲一区视频在线观看视频| 亚洲视频大全| 欧美承认网站| 亚洲国产专区| 亚洲人www| 久久婷婷久久| 欧美黄在线观看| 亚洲日韩视频| 午夜精品在线视频| 亚洲综合色婷婷| 欧美日韩精品在线播放| 亚洲精品视频在线看| 中文av字幕一区| 国产精品免费看片| 欧美在线播放高清精品| 久久午夜影视| 亚洲电影观看| 欧美—级高清免费播放| 亚洲人成网站精品片在线观看| 亚洲国产另类久久久精品极度| 乱人伦精品视频在线观看| 亚洲国产导航| 亚洲性线免费观看视频成熟| 欧美午夜电影在线| 欧美在线欧美在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 在线免费高清一区二区三区| 欧美激情1区2区3区| 在线亚洲一区| 久久视频一区二区| 亚洲欧洲在线看| 嫩草伊人久久精品少妇av杨幂| 亚洲成人在线网站| 99re视频这里只有精品| 欧美另类视频在线| 性色一区二区| 欧美黄网免费在线观看| 亚洲影院色在线观看免费| 国产欧美一区二区白浆黑人| 国产精品一区亚洲| 欧美日韩激情网| 午夜激情久久久| 欧美不卡视频一区| 亚洲欧美自拍偷拍| 亚洲精品欧美精品| 久久午夜精品| 亚洲一级一区| 亚洲福利电影| 欧美一区二区日韩| 91久久久一线二线三线品牌| 国产精品www| 久久久久一区二区三区四区| 一区二区欧美日韩| 久久亚洲视频| 午夜宅男久久久| 一区二区欧美激情| 亚洲激情成人| 永久免费精品影视网站| 国产日本亚洲高清| 国产精品拍天天在线| 欧美日韩一区精品| 欧美精品国产精品|