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

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 閱讀(699) 評論(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>
            国产在线国偷精品产拍免费yy| 国产欧美在线观看一区| 亚洲黄色在线看| 你懂的一区二区| 欧美+日本+国产+在线a∨观看| 亚洲黄色有码视频| 亚洲精品日韩久久| 国产精品成人一区二区网站软件 | 最新中文字幕一区二区三区| 欧美aⅴ一区二区三区视频| 麻豆精品在线观看| 一区二区三区四区五区精品视频| 亚洲精一区二区三区| 国产精品yjizz| 久久久中精品2020中文| 美女诱惑一区| 亚洲欧美变态国产另类| 欧美在线精品免播放器视频| 亚洲第一搞黄网站| 亚洲三级观看| 国产欧美一区二区三区久久人妖| 久久人人爽人人爽爽久久| 免费美女久久99| 亚洲伊人色欲综合网| 欧美在线短视频| 99re亚洲国产精品| 香蕉成人伊视频在线观看| 亚洲第一网站免费视频| 一本到高清视频免费精品| 国产视频欧美视频| 亚洲成人在线网| 国产精品亚洲综合天堂夜夜| 奶水喷射视频一区| 国产精品vvv| 欧美激情精品| 国产婷婷成人久久av免费高清| 欧美激情影音先锋| 国产日韩欧美另类| 日韩写真在线| 亚洲美女尤物影院| 久久九九热re6这里有精品| 亚洲视频每日更新| 欧美www在线| 久久久噜噜噜久久中文字幕色伊伊| 欧美精品在线视频观看| 米奇777在线欧美播放| 国产精品久久久一本精品| 亚洲国产精品久久久久秋霞影院| 国产区在线观看成人精品| 亚洲免费av观看| 亚洲高清在线观看一区| 欧美尤物一区| 久久都是精品| 国产精品一区二区久久久久| 亚洲日本成人| 亚洲人成网站在线播| 久久免费精品日本久久中文字幕| 久久国产精品99精品国产| 国产精品国产三级国产| aa级大片欧美| 亚洲在线免费观看| 国产精品久久久久久久久婷婷| 亚洲人成网站精品片在线观看 | 欧美美女bb生活片| 欧美成人激情视频免费观看| 国内精品久久久久伊人av| 午夜日韩视频| 久久亚洲私人国产精品va媚药| 国产欧美视频一区二区| 亚洲免费中文字幕| 久久久久国产精品人| 国内精品模特av私拍在线观看| 欧美一区二区视频观看视频| 久久精品91久久久久久再现| 国产三级欧美三级| 久久精品国产96久久久香蕉| 久久夜色精品国产噜噜av| 精品999日本| 欧美成人免费在线| 亚洲精品国产拍免费91在线| 妖精视频成人观看www| 国产精品国产精品国产专区不蜜| 亚洲香蕉伊综合在人在线视看| 欧美一区二区三区婷婷月色| 国内成人自拍视频| 欧美国产日本在线| 亚洲视频在线观看视频| 久久精品视频在线| 亚洲国产成人久久综合一区| 欧美久久一级| 欧美亚洲免费电影| 欧美福利一区二区| 亚洲一区观看| 在线观看中文字幕亚洲| 欧美日韩国产首页| 欧美一区二区三区四区高清| 欧美成人一区二区三区在线观看 | 欧美在线黄色| 在线精品视频在线观看高清| 欧美激情四色| 性色av一区二区三区红粉影视| 免费在线日韩av| 亚洲天堂久久| 影音先锋欧美精品| 欧美丝袜一区二区三区| 久久成人精品| avtt综合网| 欧美国产综合视频| 小黄鸭视频精品导航| 亚洲国产一区二区精品专区| 国产精品毛片va一区二区三区| 久久久91精品国产一区二区精品| 亚洲久久一区二区| 美女视频一区免费观看| 亚洲欧美激情视频在线观看一区二区三区| 国产亚洲一区二区精品| 欧美日韩日日骚| 蜜臀av性久久久久蜜臀aⅴ| 亚洲欧美日韩精品久久亚洲区| 欧美激情四色| 美女视频黄免费的久久| 欧美有码视频| 亚洲在线观看| 9久草视频在线视频精品| 精品成人国产| 国产一区二区三区久久久| 欧美视频日韩视频在线观看| 免费在线看一区| 久久久久久穴| 欧美一区日韩一区| 亚洲一区三区在线观看| 亚洲精品一区久久久久久 | 日韩亚洲一区在线播放| 激情综合色综合久久| 国产一区二区三区四区| 国产精品免费一区豆花| 欧美特黄a级高清免费大片a级| 欧美高清视频免费观看| 蜜臀久久99精品久久久久久9 | 欧美日韩国产麻豆| 欧美日韩大片| 欧美日韩第一页| 欧美日韩网址| 国产精品久久久久久av下载红粉| 欧美精品高清视频| 欧美精品啪啪| 欧美日韩亚洲成人| 国产精品白丝av嫩草影院| 欧美日韩一区二区免费在线观看| 欧美—级高清免费播放| 欧美激情一区二区三区高清视频| 欧美成人69av| 欧美日韩www| 国产精品久久久久影院亚瑟 | 久久精品国产在热久久| 欧美在线短视频| 久久深夜福利免费观看| 美女在线一区二区| 欧美激情女人20p| 欧美日韩一区二区视频在线观看| 欧美色欧美亚洲另类二区| 国产精品h在线观看| 国产日韩精品一区| 在线播放不卡| 在线亚洲欧美| 欧美在线三级| 亚洲第一精品夜夜躁人人爽| 亚洲日本免费| 亚洲欧美日韩国产中文在线| 久久久久国产精品人| 欧美激情第一页xxx| 国产精品一区二区男女羞羞无遮挡| 国产有码在线一区二区视频| 亚洲片在线观看| 午夜久久影院| 欧美夫妇交换俱乐部在线观看| 亚洲精品一区二区网址 | 欧美激情一区二区三区在线视频观看| 欧美激情第二页| 国产精品99久久久久久人| 久久久久免费视频| 欧美色欧美亚洲另类七区| 好吊日精品视频| 99re国产精品| 久久亚洲欧洲| 宅男精品视频| 免费看黄裸体一级大秀欧美| 欧美性做爰毛片| 亚洲高清电影| 欧美一区二区三区在线观看视频| 欧美国产在线观看| 午夜综合激情| 欧美日韩亚洲成人| 亚洲国产高清aⅴ视频| 亚洲欧美日韩专区| 亚洲第一页在线| 久久精品国产一区二区三| 国产精品国产三级国产普通话99| 91久久一区二区| 蜜桃av噜噜一区|