zoukankan      html  css  js  c++  java
  • POJ1789 Truck History(prim)

    题目链接

    分析:

    最大的敌人果然不是别人,就是她(英语)。

    每种代表车型的串,他们的distance就是串中不同字符的个数,要求算出所有串的distance's 最小 sum。

    AC代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    const int maxn = 2200;
    const int INF = (1<<29);
    
    char s[maxn][10];
    unsigned short G[maxn][maxn];
    bool vis[maxn];
    int d[maxn], n;
    
    int dis(int i, int j) {
        char *p1 = *(s+i), *p2 = *(s+j);
        int cnt = 0;
    
        while(*p1 && *p2) {
            if(*p1++ != *p2++) cnt++;
        }
    
        return cnt;
    }
    
    int prim(int s) {
        int ans = 0;
    
        memset(vis, false, sizeof(vis));
    
        for(int i=0; i<n; i++) d[i] = G[s][i];
        d[s] = 0; vis[s] = true;
    
        for(int i=0; i<n-1; i++) {
            int x, m = INF;
            for(int y=0; y<n; y++) if(!vis[y] && m >= d[y]) m = d[x=y];
            ans += m;
            vis[x] = true;
            for(int y=0; y<n; y++) if(!vis[y] && d[y] > G[x][y]) d[y] = G[x][y];
        }
    
        return ans;
    }
    
    int main() {
    
        while(scanf("%d", &n) == 1 && n != 0) {
            for(int i=0; i<n; i++) {
                scanf("%s", s[i]);
            }
    
            for(int i=0; i<n; i++) {
                G[i][i] = 0;
                for(int j=0; j<i; j++) {
                    G[i][j] = G[j][i] = dis(i, j);
                }
            }
    
            int ans = prim(0);
            printf("The highest possible quality is 1/%d.
    ", ans);
        }
    
        return 0;
    }
  • 相关阅读:
    install jprofiler for ubuntu
    android manifest相关属性
    install nginx for ubuntu
    Android shape
    mobile web for no cookie session
    Android布局属性
    什么是强类型,强类型集合
    radl (三) (转)
    几个.net 基础问题,自己回答了一些,请大家指教
    c#接口和抽象类的区别
  • 原文地址:https://www.cnblogs.com/tanhehe/p/3252417.html
Copyright © 2011-2022 走看看