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

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>
            欧美日韩一区二| 国产小视频国产精品| 亚洲高清视频的网址| 久久久久久有精品国产| 欧美影院久久久| 国产中文一区| 欧美激情第1页| 欧美日韩国产探花| 亚洲视频在线观看| 亚洲综合导航| 国产亚洲美州欧州综合国| 久久久高清一区二区三区| 久久av二区| 亚洲精品视频一区| 99成人免费视频| 国产亚洲精品资源在线26u| 久久综合伊人77777蜜臀| 欧美成人一区二区三区在线观看 | 性欧美video另类hd性玩具| 国产日韩亚洲欧美| 欧美国产一区二区| 欧美三级电影一区| 久久久青草婷婷精品综合日韩| 久久久久久999| 一区二区三区.www| 先锋亚洲精品| 日韩午夜在线观看视频| 亚洲欧美日韩国产一区二区三区| 国内偷自视频区视频综合| 亚洲黄一区二区| 国产视频精品免费播放| 欧美激情第六页| 国产精品综合| 亚洲人成欧美中文字幕| 国产日韩av一区二区| 亚洲国产乱码最新视频| 国产日韩欧美一区二区三区在线观看| 欧美va亚洲va日韩∨a综合色| 欧美婷婷六月丁香综合色| 裸体素人女欧美日韩| 国产精品久久久久久久久| 蜜臀91精品一区二区三区| 国产精品美女在线| 亚洲人成小说网站色在线| 国产主播一区二区三区四区| 一区二区三区欧美在线| 亚洲精品美女在线观看| 久久精品日产第一区二区| 亚洲综合激情| 欧美另类专区| 亚洲电影在线看| 亚洲电影免费观看高清完整版| 亚洲一级在线观看| 亚洲视频精选| 欧美精品午夜| 欧美激情视频网站| 揄拍成人国产精品视频| 久久国产一区| 久久大逼视频| 国产日韩精品久久| 亚洲欧美在线磁力| 香蕉乱码成人久久天堂爱免费 | 免费国产一区二区| 开心色5月久久精品| 国产一区91| 亚洲主播在线观看| 香蕉久久夜色精品国产| 国产精品vvv| 制服丝袜亚洲播放| 亚洲免费视频观看| 欧美性开放视频| 亚洲一区二区视频在线| 午夜精品一区二区三区在线| 欧美午夜欧美| 亚洲永久网站| 久久精品一区| 亚洲成人原创| 欧美激情精品久久久久久变态| 亚洲国产日韩欧美在线动漫| 亚洲精品美女久久7777777| 欧美精品色网| 亚洲一级黄色| 久久久亚洲综合| 亚洲国产日韩美| 欧美日韩成人综合在线一区二区| 99精品热视频只有精品10| 午夜伦欧美伦电影理论片| 国产网站欧美日韩免费精品在线观看| 亚洲欧美伊人| 欧美电影专区| 亚洲一区二区av电影| 国产日韩欧美夫妻视频在线观看| 欧美伊久线香蕉线新在线| 欧美 日韩 国产 一区| 夜夜嗨av一区二区三区四季av| 欧美性久久久| 久久精品视频99| 亚洲人成网站在线观看播放| 欧美一级大片在线观看| 在线色欧美三级视频| 欧美三级电影网| 欧美在线亚洲在线| 亚洲区国产区| 久久亚洲图片| 亚洲视频第一页| 在线精品亚洲| 国产精品一区二区你懂的| 久久久久国产一区二区| 亚洲美女av在线播放| 久久久午夜视频| av成人老司机| 在线不卡免费欧美| 国产精品免费视频xxxx| 免费精品99久久国产综合精品| 亚洲视频播放| 91久久黄色| 久久久国产视频91| 一区二区黄色| 亚洲国产电影| 国产综合精品一区| 欧美午夜不卡| 欧美xxx成人| 久久久精品日韩| 亚洲欧美电影院| 日韩亚洲欧美高清| 欧美成人a视频| 久久久久88色偷偷免费| 一区二区三区四区五区视频| 好吊色欧美一区二区三区视频| 欧美日韩在线播放三区四区| 麻豆精品在线视频| 久久久精品国产一区二区三区| 亚洲综合成人在线| 亚洲乱码精品一二三四区日韩在线| 久久久久国产一区二区三区| 一区二区三区欧美日韩| 91久久在线播放| 激情视频一区二区| 国内精品久久久久久影视8| 国产精品每日更新在线播放网址| 欧美精品七区| 欧美高潮视频| 美女黄网久久| 蜜月aⅴ免费一区二区三区| 久久精品国产欧美亚洲人人爽| 99精品热视频| 一区二区三区四区国产| 亚洲免费黄色| 亚洲精品小视频| 91久久视频| 亚洲精一区二区三区| 欧美激情久久久久久| 亚洲国产欧美一区二区三区同亚洲 | 亚洲国产精品视频一区| 亚洲第一成人在线| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲国产一区二区精品专区| 在线观看亚洲专区| 亚洲电影免费观看高清| 亚洲激情影院| 一区二区三区久久| 亚洲直播在线一区| 欧美专区18| 美腿丝袜亚洲色图| 亚洲国产精品精华液网站| 亚洲美女免费精品视频在线观看| 亚洲免费成人av| 亚洲免费在线视频| 久久久中精品2020中文| 欧美大片第1页| 国产精品美女久久久久久免费| 国产手机视频精品| 亚洲人成人一区二区三区| 亚洲一区二区三区免费视频| 欧美一区二区在线| 欧美黄色aa电影| 一区二区三区视频免费在线观看| 午夜精品久久久久影视| 久久午夜电影| 国产精品福利在线| 伊人精品在线| 亚洲午夜视频| 毛片av中文字幕一区二区| 最近看过的日韩成人| 亚洲欧美制服另类日韩| 老**午夜毛片一区二区三区| 欧美在线黄色| 欧美不卡视频一区发布| 99在线精品视频在线观看| 久久黄金**| 欧美日韩亚洲一区二区三区| 精品成人乱色一区二区| 亚洲午夜久久久久久久久电影院| 久久亚洲不卡| 亚洲特色特黄| 欧美精品成人91久久久久久久| 国产一区日韩欧美| 亚洲欧美日韩综合aⅴ视频| 亚洲高清不卡在线观看| 欧美在线观看一区|