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

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

二、分析
      一個簡單的最優(yōu)匹配問題,但要注意它要求的是最小權(quán)匹配,可以改成最大權(quán)匹配(第57行)用KM算法,詳細(xì)算法:匹配問題
三、代碼
 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 閱讀(698) 評論(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>
            免费在线成人| 亚洲欧洲在线观看| 最新日韩欧美| 亚洲高清不卡| 免费看亚洲片| 亚洲人成免费| 亚洲国产精品女人久久久| 一区二区激情视频| 亚洲一区二区精品| 国产欧美日韩视频一区二区| 欧美诱惑福利视频| 欧美肥婆在线| 久久精品日韩| 欧美日韩一区综合| 另类av导航| 国产精品热久久久久夜色精品三区| 久久全球大尺度高清视频| 欧美另类99xxxxx| 久久尤物视频| 国产精品午夜在线观看| 亚洲人成免费| 在线观看久久av| 亚洲午夜电影| 99精品免费| 另类图片国产| 久久精品国产精品亚洲精品| 欧美激情一二三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美色图麻豆| 亚洲日本激情| 亚洲日韩成人| 蜜臀a∨国产成人精品| 久久久久国色av免费观看性色| 欧美日韩在线另类| 亚洲国产成人不卡| 国产欧美日韩不卡免费| 日韩一区二区电影网| 亚洲全黄一级网站| 亚洲激情社区| 1024成人| 久久另类ts人妖一区二区 | 99视频热这里只有精品免费| 在线观看视频免费一区二区三区| 亚洲永久免费观看| 亚洲一区二区三区免费观看| 麻豆91精品| 能在线观看的日韩av| 国内在线观看一区二区三区| 亚洲一区尤物| 午夜综合激情| 国产亚洲人成网站在线观看| 欧美一区=区| 久久www成人_看片免费不卡| 国产精品久久久免费| 一区二区三区久久精品| 亚洲一区二区三区四区五区黄| 欧美日韩欧美一区二区| 日韩一二三区视频| 亚洲欧美日韩久久精品| 国产精品国产三级国产普通话99 | 136国产福利精品导航网址| 亚洲一区二区成人在线观看| 亚洲在线观看| 国产欧美精品一区二区色综合| 性久久久久久久久久久久| 久久精品视频在线播放| 狠狠久久亚洲欧美| 久热精品视频在线免费观看| 亚洲国产91精品在线观看| 日韩小视频在线观看专区| 欧美日韩高清在线播放| 亚洲视屏在线播放| 久久国产精品黑丝| 有坂深雪在线一区| 欧美福利精品| 一区二区三区蜜桃网| 欧美在线资源| 亚洲第一视频| 欧美图区在线视频| 香蕉久久夜色精品国产使用方法| 国产精品久久久久久久久搜平片 | 国产精品自拍小视频| 小黄鸭精品aⅴ导航网站入口| 久热精品视频| 在线亚洲观看| 国产在线精品成人一区二区三区| 久久夜色精品国产| 一本久道久久综合婷婷鲸鱼| 欧美一级电影久久| 在线日韩av片| 欧美性感一类影片在线播放| 久久国产精品一区二区三区四区 | 一区二区三区自拍| 欧美精品一区二区三区久久久竹菊 | 午夜一区在线| 亚洲激情网站免费观看| 亚洲欧美视频在线观看视频| 国产一区激情| 欧美日韩成人一区二区三区| 午夜精品福利一区二区三区av| 欧美成年人视频网站| 亚洲男女自偷自拍| 18成人免费观看视频| 欧美性久久久| 欧美aⅴ99久久黑人专区| 亚洲男人影院| 亚洲伦理自拍| 欧美黄色一区| 久久精品视频在线观看| 亚洲一区视频在线观看视频| 在线精品视频一区二区| 国产欧美一区二区精品秋霞影院| 欧美成人精品一区二区| 欧美一区二区国产| 99精品视频免费观看视频| 欧美大片在线看| 久久精品欧美| 欧美一区二区三区四区高清| 亚洲美女免费视频| 黄色亚洲大片免费在线观看| 欧美视频一区在线观看| 欧美a级片一区| 久久久国产午夜精品| 午夜精品一区二区三区在线播放| 亚洲激情视频| 欧美激情亚洲综合一区| 久久一日本道色综合久久| 亚洲午夜日本在线观看| 亚洲精品一区二区网址 | 亚洲精品国产精品国自产观看浪潮 | 久久综合福利| 久久成人亚洲| 亚洲欧美第一页| 一本一本久久a久久精品综合麻豆| 亚洲国产成人不卡| 合欧美一区二区三区| 国产精品日本一区二区| 欧美色图天堂网| 欧美精品一区二区三区在线播放 | 欧美一区二区视频免费观看| 一区二区三区视频在线看| 日韩亚洲精品电影| 亚洲看片网站| 亚洲免费高清视频| 亚洲精品乱码久久久久久日本蜜臀| 国内精品一区二区三区| 国产综合久久久久久| 国模精品一区二区三区| 经典三级久久| 在线欧美视频| 日韩午夜中文字幕| 欧美日韩精品一区二区在线播放 | 日韩视频―中文字幕| 亚洲高清自拍| 亚洲大胆在线| 亚洲全部视频| 亚洲国产天堂久久国产91| 亚洲国产美女精品久久久久∴| 亚洲欧洲在线看| 欧美日韩成人精品| 午夜久久影院| 久久av资源网| 久久精品30| 欧美.com| 欧美性色aⅴ视频一区日韩精品| 欧美日韩视频在线一区二区观看视频 | 国产欧美日韩视频在线观看 | 亚洲综合视频网| 欧美在线播放| 欧美α欧美αv大片| 欧美日韩在线高清| 国产亚洲电影| 欧美大片在线看免费观看| 欧美日韩免费在线视频| 国产欧美日韩三级| 亚洲欧洲日产国产网站| 亚洲一区二区三区四区五区黄 | 欧美肉体xxxx裸体137大胆| 国产欧美在线观看| 亚洲国产午夜| 欧美一级视频免费在线观看| 鲁大师成人一区二区三区| 亚洲精品视频免费在线观看| 亚洲在线成人精品| 蜜桃av一区二区| 国产精品日韩欧美一区| 亚洲第一精品影视| 欧美一区二区三区四区视频| 欧美激情四色 | 亚洲一二区在线| 久久久人成影片一区二区三区| 亚洲大胆人体视频| 亚洲欧美日韩精品久久奇米色影视| 久久综合久久综合九色| 国产精品国码视频| 日韩一二三区视频| 老巨人导航500精品| 亚洲欧美经典视频| 欧美日韩午夜精品| 欧美视频导航|