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

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 閱讀(693) 評論(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>
            久久人体大胆视频| 激情婷婷亚洲| 久久精品视频在线播放| 欧美一二三视频| 久久全国免费视频| 鲁大师成人一区二区三区| 欧美aⅴ一区二区三区视频| 欧美乱妇高清无乱码| 国产精品盗摄一区二区三区| 国产一区二区三区免费观看 | 欧美亚洲三区| 久久精品国语| 欧美精品麻豆| 国产亚洲一本大道中文在线| 亚洲福利电影| 亚洲欧美三级伦理| 美女视频黄免费的久久| 亚洲精选视频在线| 久久精品视频在线观看| 欧美日韩国产在线| 精品91视频| 亚洲综合欧美| 亚洲国产精品日韩| 亚洲香蕉网站| 欧美精品久久久久久久久老牛影院 | 国内成人在线| 日韩午夜在线电影| 久久久久久网址| 在线亚洲成人| 欧美激情一区二区三区高清视频| 国产日产欧产精品推荐色 | 国产精品久久久久久久久久直播| 影音先锋亚洲视频| 性视频1819p久久| 亚洲另类黄色| 欧美国产先锋| 亚洲肉体裸体xxxx137| 久久深夜福利| 欧美一区二区三区在线看| 欧美日韩直播| 一区二区三区久久久| 亚洲欧洲精品一区二区精品久久久| 欧美一区二区大片| 国产精品一区二区视频| 亚洲一区二区在线播放| 亚洲精品视频免费| 欧美电影打屁股sp| 久久综合导航| 国产午夜久久| 亚洲专区一区二区三区| 亚洲国产精品久久久久秋霞不卡| 小黄鸭精品aⅴ导航网站入口| 国产精品国产三级国产专播品爱网| 亚洲精品免费网站| 亚洲国产成人精品久久| 久久精品国产亚洲a| 国产综合久久久久久| 久久久精品999| 午夜精品国产精品大乳美女| 国产精品美女| 久久不射网站| 久久嫩草精品久久久久| 亚洲全黄一级网站| 亚洲狼人综合| 国产伦精品一区| 久久嫩草精品久久久精品一| 久久影视精品| 999在线观看精品免费不卡网站| 亚洲国内在线| 欧美视频二区| 欧美一区网站| 久久午夜视频| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲一区二区三区精品在线观看 | 亚洲激情影视| 欧美日韩一区成人| 欧美一区二视频| 久久精品综合网| 亚洲精品视频一区| 亚洲香蕉在线观看| 亚洲春色另类小说| 日韩亚洲欧美综合| 国产一区二区三区日韩欧美| 欧美高清视频在线观看| 欧美亚男人的天堂| 狼人社综合社区| 欧美精品一区二区三区视频| 欧美一级精品大片| 欧美黑人一区二区三区| 欧美一区二区视频观看视频| 久久中文久久字幕| 亚洲尤物在线| 欧美成人69| 久久久久久穴| 欧美日韩情趣电影| 免费久久99精品国产自| 欧美视频四区| 国产精品久久久久久久久果冻传媒 | 久久精品一区二区三区中文字幕| 久久影视精品| 午夜视频一区在线观看| 免费久久精品视频| 欧美自拍偷拍| 欧美日本免费| 欧美福利在线| 黑人巨大精品欧美一区二区小视频| 亚洲精品男同| 在线成人小视频| 午夜国产欧美理论在线播放| 日韩性生活视频| 可以看av的网站久久看| 久久黄色影院| 国产精品美女久久| 日韩视频免费在线| 亚洲人午夜精品| 久久久久久午夜| 久久国产精品久久精品国产| 欧美日韩一区二区在线| 亚洲第一二三四五区| 精品成人一区二区| 欧美中文在线观看国产| 性色av香蕉一区二区| 国产精品国产自产拍高清av| 日韩视频免费观看高清在线视频 | 国产精品一区二区在线观看网站 | 欧美亚一区二区| 亚洲精品黄色| 日韩亚洲欧美一区二区三区| 久久综合久久综合九色| 久久免费观看视频| 黄色精品一区| 久久精品首页| 欧美.日韩.国产.一区.二区| 红桃av永久久久| 久久久久久久综合色一本| 麻豆九一精品爱看视频在线观看免费 | 久久婷婷丁香| 极品少妇一区二区三区| 久久av最新网址| 久久综合中文字幕| 在线观看精品| 欧美成人一区二区在线 | 欧美激情亚洲精品| 亚洲精品国产视频| 欧美日韩色婷婷| 亚洲一区二区在线观看视频| 久久爱另类一区二区小说| 黄色成人av在线| 正在播放日韩| 国产精品成人播放| 亚洲视屏一区| 久久久久五月天| 91久久精品国产| 欧美日韩一区二区高清| 亚洲欧美日韩国产综合精品二区| 久久精品国产欧美亚洲人人爽| 激情综合久久| 欧美日韩专区在线| 欧美在线二区| 亚洲欧洲午夜| 久久av资源网站| 亚洲精品乱码久久久久久黑人 | 久久综合网络一区二区| 亚洲精品一区二区三区99| 国产精品国产三级国产普通话蜜臀| 亚洲欧美中文另类| 欧美激情aⅴ一区二区三区| 午夜激情综合网| 亚洲国产日韩综合一区| 欧美午夜精品一区二区三区| 欧美中文在线观看| 日韩网站在线看片你懂的| 久久久久在线| 亚洲午夜精品久久久久久浪潮| 国产日本欧美一区二区三区| 牛人盗摄一区二区三区视频| 亚洲一区二区高清视频| 亚洲高清色综合| 久久久久久久一区二区| 一区二区国产日产| 在线免费高清一区二区三区| 欧美午夜一区二区三区免费大片| 久久亚洲免费| 欧美在线播放| 亚洲主播在线播放| 亚洲精品欧美激情| 牛牛影视久久网| 久久九九免费视频| 午夜精品久久久久久久蜜桃app | 亚洲国产精品久久久久秋霞不卡 | 亚洲伊人第一页| 亚洲国产精品成人一区二区| 国产日韩欧美高清免费| 欧美性一区二区| 欧美激情精品久久久久久变态| 久久久久久国产精品mv| 午夜欧美不卡精品aaaaa| 中文高清一区| 一本色道婷婷久久欧美| 亚洲精品日韩在线观看|