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

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>
            亚洲视频精品在线| 久久久久国内| 一本到高清视频免费精品| 亚洲日本久久| 亚洲视频视频在线| 亚洲欧美怡红院| 久久精品国产清自在天天线| 老司机精品导航| 欧美华人在线视频| 亚洲美女免费精品视频在线观看| 亚洲电影免费观看高清完整版在线观看 | 久久久精品午夜少妇| 久久国产精品久久久| 久久久久久久久久久久久久一区| 欧美高清成人| 亚洲深夜影院| 久久精品官网| 欧美日本一区二区高清播放视频| 国产麻豆综合| 亚洲精品在线视频观看| 亚洲一区二区三区激情| 久久久久一区二区三区| 亚洲国产成人在线播放| 亚洲摸下面视频| 欧美第一黄网免费网站| 国产伦精品一区二区三区视频黑人| 伊人久久亚洲影院| 亚洲在线视频网站| 欧美高清视频| 午夜精品在线| 欧美日韩高清在线一区| 影音欧美亚洲| 久久国产综合精品| 日韩视频免费大全中文字幕| 欧美影院在线播放| 欧美日韩中文在线| 亚洲精品老司机| 久久久久成人精品| 亚洲午夜一区| 欧美精品一区在线观看| 一区二区三区无毛| 欧美一区午夜精品| 亚洲精品一区二区三区99| 久久久噜噜噜久久中文字幕色伊伊| 国产精品99一区| 一个人看的www久久| 欧美a级片网| 久久精品国产清自在天天线| 国产精品欧美日韩一区| 国产精品99久久久久久久女警| 免费成人高清视频| 欧美中文在线视频| 国产精品主播| 欧美一区二区三区在线| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美一区二区精品久久911| 91久久精品国产91久久| 久久久久久综合网天天| 国内自拍视频一区二区三区| 欧美一区二区视频网站| 亚洲天堂网站在线观看视频| 欧美日韩一卡二卡| 亚洲午夜小视频| 一区二区日韩伦理片| 欧美午夜不卡视频| 亚洲一区二区在线看| 制服丝袜亚洲播放| 国产精品久久久久久久电影 | 国产精品亚洲不卡a| 制服丝袜亚洲播放| 在线视频精品| 欧美性一区二区| 午夜精品视频一区| 午夜精品久久久久久久男人的天堂| 国产酒店精品激情| 久久天堂成人| 美女精品一区| 艳女tv在线观看国产一区| 日韩视频在线免费| 国产精品专区h在线观看| 久久先锋影音| 欧美精品久久天天躁| 亚洲在线播放电影| 欧美中在线观看| 在线看视频不卡| 亚洲欧洲在线一区| 国产精品久久久久影院色老大| 欧美一区二区啪啪| 免费欧美视频| 亚洲综合第一页| 久久精品视频在线播放| 一区二区三区欧美成人| 亚洲欧美一区二区激情| 91久久久久| 午夜激情久久久| 亚洲国产精品一区二区久| 亚洲精品影院在线观看| 国产欧美日韩亚洲一区二区三区 | 在线观看视频欧美| 日韩视频永久免费| 国产亚洲精品bt天堂精选| 欧美黄色视屏| 国产精品一区二区久久精品| 欧美大色视频| 国产欧美精品日韩区二区麻豆天美| 欧美激情2020午夜免费观看| 国产精品免费小视频| 亚洲国产第一| 黄色综合网站| 亚洲一区二区动漫| aa亚洲婷婷| 蜜桃av噜噜一区| 久久久久成人精品免费播放动漫| 欧美日韩一区二区国产| 免费观看一区| 国产一区二区日韩| 宅男噜噜噜66一区二区66| 亚洲精品之草原avav久久| 久久久91精品国产| 久久精品成人欧美大片古装| 欧美视频在线观看视频极品| 亚洲国产精品激情在线观看| 国产亚洲一级高清| 亚洲午夜av| 亚洲小说欧美另类社区| 欧美高潮视频| 欧美成人免费在线视频| 一色屋精品视频在线看| 午夜视频在线观看一区二区三区| 亚洲一区二区三区高清| 欧美日韩性生活视频| 亚洲美女福利视频网站| 亚洲乱亚洲高清| 欧美成人精品在线播放| 欧美电影免费观看高清| 亚洲国产成人精品视频| 老司机午夜免费精品视频| 欧美mv日韩mv国产网站| 在线免费日韩片| 久久久久久穴| 你懂的视频一区二区| 136国产福利精品导航| 久久久久久自在自线| 模特精品在线| 亚洲肉体裸体xxxx137| 欧美~级网站不卡| 欧美激情中文不卡| 日韩一区二区久久| 欧美日韩免费观看一区三区| 日韩天堂av| 午夜在线视频观看日韩17c| 国产欧美韩国高清| 久久久久国内| 欧美国产在线电影| 99精品99| 国产精品免费网站| 久久精品一区蜜桃臀影院| 久久亚洲欧美| 亚洲狠狠婷婷| 欧美日韩在线视频观看| 亚洲一区二区精品视频| 久久久一区二区三区| 亚洲黄网站黄| 国产精品v日韩精品| 午夜亚洲精品| 亚洲国产老妈| 亚洲欧美日韩精品| 韩国美女久久| 欧美日韩 国产精品| 亚洲丝袜av一区| 美日韩精品视频| 一区二区三区久久网| 国产区在线观看成人精品| 免费欧美在线视频| 亚洲视频一区二区免费在线观看| 久久久五月天| 一区二区三区波多野结衣在线观看| 国产区欧美区日韩区| 欧美国产日韩视频| 性伦欧美刺激片在线观看| 亚洲高清视频在线| 欧美一站二站| 日韩视频在线观看| 狠狠色丁香久久综合频道| 欧美日韩国产大片| 久久久99精品免费观看不卡| 日韩一级免费观看| 老司机精品视频网站| 亚洲男同1069视频| 亚洲日本aⅴ片在线观看香蕉| 国产精品一区视频网站| 欧美久久久久久| 玖玖视频精品| 久久国产乱子精品免费女| 99精品国产福利在线观看免费| 免费成人高清| 久久精视频免费在线久久完整在线看| 中文精品视频| 亚洲日韩欧美视频一区| 亚洲国产免费|