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

posts - 18,  comments - 5,  trackbacks - 0
一、題目描述

Description

On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, either horizontally, or vertically, to an adjacent point. For each little man, you need to pay a $1 travel fee for every step he moves, until he enters a house. The task is complicated with the restriction that each house can accommodate only one little man.

Your task is to compute the minimum amount of money you need to pay in order to send these n little men into those n different houses. The input is a map of the scenario, a '.' means an empty space, an 'H' represents a house on that point, and am 'm' indicates there is a little man on that point.

You can think of each point on the grid map as a quite large square, so it can hold n little men at the same time; also, it is okay if a little man steps on a grid with a house without entering that house.

Input

There are one or more test cases in the input. Each case starts with a line giving two integers N and M, where N is the number of rows of the map, and M is the number of columns. The rest of the input will be N lines describing the map. You may assume both N and M are between 2 and 100, inclusive. There will be the same number of 'H's and 'm's on the map; and there will be at most 100 houses. Input will terminate with 0 0 for N and M.

Output

For each test case, output one line with the single integer, which is the minimum amount, in dollars, you need to pay.

Sample Input

2 2
.m
H.
5 5
HH..m
.....
.....
.....
mm..H
7 8
...H....
...H....
...H....
mmmHmmmm
...H....
...H....
...H....
0 0

Sample Output

2
10
28

二、分析
      一個簡單的最優匹配問題,但要注意它要求的是最小權匹配,可以改成最大權匹配(第57行)用KM算法,詳細算法:匹配問題
三、代碼
 1#include<iostream>
 2#include<cmath>
 3using namespace std;
 4int n, m;
 5char str[101];
 6int hc, home[100][2];
 7int mc, man[100][2];
 8int map[100][100];
 9int lx[100], ly[100];
10int mat[100];
11bool vx[100], vy[100];
12int  slack[100];
13bool dfs(int u)
14{
15    vx[u] = true;
16    for(int v=0; v<mc; v++)
17    {
18        if(!vy[v] && lx[u]+ly[v] == map[u][v])
19        {
20            vy[v] = true;
21            if(mat[v]==-1 || dfs(mat[v]))
22            {
23                mat[v] = u;
24                return true;
25            }

26        }

27        else if(lx[u]+ly[v] > map[u][v])
28            slack[v] = min(slack[v], lx[u] + ly[v] - map[u][v]);
29    }

30    return false;
31}

32int main()
33{
34    while(1)
35    {
36        scanf("%d%d"&n, &m);
37        if(n==0 && m==0)
38            break;
39        hc = mc = 0;
40        for(int i=0; i<n; i++)
41        {
42            scanf("%s", str);
43            for(int j=0; j<m; j++)
44            {
45                if(str[j] == 'H')
46                {
47                    home[hc][0= i; home[hc++][1= j;
48                }

49                else if(str[j] == 'm')
50                {
51                    man[mc][0= i; man[mc++][1= j;
52                }

53            }

54        }

55        for(int i=0; i<mc; i++)
56            for(int j=0; j<mc; j++)
57                map[i][j] = 200 - abs(man[i][0]-home[j][0]) - abs(man[i][1]-home[j][1]);
58        memset(lx, 0sizeof(lx));
59        memset(ly, 0sizeof(ly));
60        for(int u=0; u<mc; u++)
61            for(int v=0; v<hc; v++)
62                lx[u] = max(lx[u], map[u][v]);
63        memset(mat, -1sizeof(mat));
64        for(int u=0; u<mc; u++)
65        {
66            while(1)
67            {
68                memset(vx, 0sizeof(vx));
69                memset(vy, 0sizeof(vy));
70                for(int j=0; j<mc; j++)
71                    slack[j] = INT_MAX;
72                if(dfs(u))
73                    break;
74                int al = INT_MAX;
75                for(int i=0; i<mc; i++)
76                    if(!vy[i])
77                        al = min(al, slack[i]);
78                for(int i=0; i<mc; i++)
79                {
80                    if(vx[i]) lx[i] -= al;
81                    if(vy[i]) ly[i] += al;
82                }

83            }

84        }

85        int res = 0;
86        for(int v=0; v<mc; v++)
87            res += 200 - map[mat[v]][v];
88        printf("%d\n", res);
89    }

90}
posted on 2009-06-29 14:42 Icyflame 閱讀(705) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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福利在线观看| 国产亚洲福利| 亚洲欧美国产制服动漫| 亚洲校园激情| 欧美视频在线看| 一本大道久久a久久精二百| 亚洲人成在线播放网站岛国| 老色鬼久久亚洲一区二区| 久热国产精品视频| 狠狠色丁香婷婷综合久久片| 午夜精品剧场| 久久久噜久噜久久综合| 国产精品影视天天线| 亚洲尤物在线| 欧美一区二区三区精品电影| 国产精品永久免费视频| 午夜日韩在线| 久久精品男女| 亚洲福利视频网站| 欧美不卡高清| 亚洲精品久久久久久久久| 亚洲国产精品va在线看黑人动漫| 久久久久网址| 亚洲国产精品成人综合| 夜夜夜久久久| 欧美午夜精品久久久久久人妖| 一区二区欧美国产| 欧美一区三区二区在线观看| 国产三区精品| 久久久久久久综合| 亚洲成在人线av| 中文一区在线| 国产亚洲一区二区三区在线播放 | 久久久久久久尹人综合网亚洲| 欧美xart系列在线观看| 91久久精品一区二区别| 亚洲视频你懂的| 国产精品亚洲美女av网站| 久久不射2019中文字幕| 亚洲国产另类精品专区| 亚洲欧美国产77777| 国精品一区二区| 欧美xx69| 亚洲欧美中文在线视频| 欧美成人免费大片| 亚洲午夜精品福利| 狠狠狠色丁香婷婷综合久久五月 | 美女日韩欧美| 中文日韩在线视频| 欧美激情精品久久久六区热门| 亚洲毛片在线观看.| 国产精品热久久久久夜色精品三区| 午夜精品久久久久久99热软件| 蜜臀久久99精品久久久久久9| 99国产精品久久| 国模精品娜娜一二三区| 欧美女主播在线| 久久精品国产v日韩v亚洲 | 妖精成人www高清在线观看| 国产精品网站在线观看| 欧美成年人网站| 欧美一区成人| 一本到高清视频免费精品| 另类综合日韩欧美亚洲| 亚洲欧美日韩在线观看a三区 | 欧美mv日韩mv国产网站| 亚洲欧美日韩综合| 亚洲国产精品va在看黑人| 国产精品日韩二区| 欧美激情一区| 美女精品视频一区| 午夜精品一区二区在线观看 | 欧美精品三级在线观看| 久久精品一区二区三区不卡| 亚洲线精品一区二区三区八戒| 欧美激情乱人伦| 久久亚洲一区二区三区四区| 午夜一区二区三区不卡视频| 夜夜嗨av一区二区三区网站四季av | 久久久av水蜜桃| 香港久久久电影| 亚洲一区二区三区四区视频| 亚洲伦理一区| 亚洲人永久免费| 亚洲国产乱码最新视频| 黄色成人av网| 韩日成人av| 韩国免费一区| 国产一区二区精品久久91| 国产精品免费网站在线观看| 国产精品白丝黑袜喷水久久久| 欧美国产专区| 欧美激情片在线观看| 欧美不卡在线| 欧美成人一区二区三区片免费| 久久综合中文字幕| 久热精品视频在线免费观看| 久久蜜桃精品| 嫩草影视亚洲| 欧美91大片| 欧美日本国产| 欧美视频一区| 国产精品视频午夜| 国产日产欧美精品| 国产一区二区av| 激情丁香综合| 亚洲国产小视频在线观看| 最近中文字幕日韩精品 | 亚洲二区视频在线| 亚洲黑丝一区二区| 999亚洲国产精| 亚洲一区精品在线| 欧美在线精品免播放器视频| 久久精品99久久香蕉国产色戒| 久久精品2019中文字幕| 卡通动漫国产精品| 亚洲国产精品电影| 99精品国产福利在线观看免费| 亚洲视频自拍偷拍| 久久精品国产亚洲高清剧情介绍| 久久亚洲高清| 欧美日韩国产三区| 国产婷婷色一区二区三区四区| 黄色在线成人| 夜夜嗨av一区二区三区网站四季av| 亚洲免费网址| 另类综合日韩欧美亚洲| 亚洲精品一线二线三线无人区| 亚洲视频在线免费观看| 久久欧美肥婆一二区| 欧美日韩免费看| 国产在线国偷精品产拍免费yy| 亚洲精品视频在线播放| 性欧美超级视频| 欧美黄色免费网站| 亚洲无毛电影| 免费成人高清在线视频| 国产精品美女久久久浪潮软件| 樱花yy私人影院亚洲| 亚洲一区精彩视频| 欧美激情精品久久久久久免费印度| 一区二区日韩欧美| 免费日韩av| 国产欧美日韩一区二区三区在线观看| 亚洲国产精品电影在线观看| 亚洲欧美日韩网| 亚洲国内精品在线| 久久久91精品| 国产精品日韩欧美| 亚洲精品乱码久久久久久| 久久av红桃一区二区小说| 亚洲片在线资源| 欧美怡红院视频一区二区三区| 欧美日韩精品久久| 亚洲黄色成人| 久久亚洲私人国产精品va媚药| 日韩亚洲在线观看| 美女网站久久| 激情一区二区| 久久成人国产精品| 一本久久综合| 欧美精品在线一区| 亚洲国产欧美久久| 麻豆freexxxx性91精品| 欧美一级网站| 欧美网站大全在线观看| 亚洲人成网站色ww在线| 麻豆精品在线视频| 欧美一区影院| 国产婷婷精品| 久久不射中文字幕| 亚洲一区三区在线观看| 欧美视频一区二| 一区二区三区福利| 亚洲精品一区二区网址| 欧美黄色视屏| 99国产精品国产精品久久| 亚洲福利av| 美女精品在线观看| 91久久精品美女| 亚洲国产成人久久| 欧美多人爱爱视频网站| 亚洲国产精品va在线看黑人| 美女网站久久| 猫咪成人在线观看| 亚洲人妖在线| 亚洲人成在线播放| 欧美日韩精品一区二区在线播放 | 欧美日韩一区二| 亚洲一区二区三区四区五区黄| 一区二区毛片| 国产日产精品一区二区三区四区的观看方式 | 欧美a一区二区|