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

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 閱讀(692) 評論(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>
            欧美激情一区二区| 欧美一区二区视频97| 久久亚洲欧美| 韩日精品在线| 麻豆精品网站| 久久综合久久综合九色| 国内精品久久久久久久果冻传媒| 亚洲在线观看视频| 亚洲影院一区| 国产精品久久久久天堂| 性色av一区二区三区| 亚洲欧美成人网| 国产一区二区剧情av在线| 久久一二三四| 久久综合久色欧美综合狠狠| 亚洲伦理网站| 亚洲天堂激情| 好吊色欧美一区二区三区四区| 男女视频一区二区| 欧美精品尤物在线| 香蕉免费一区二区三区在线观看| 久久精品二区亚洲w码| 亚洲国产日韩欧美在线动漫| 亚洲美女免费精品视频在线观看| 国产精品久久999| 久久久久久**毛片大全| 另类国产ts人妖高潮视频| 亚洲靠逼com| 亚洲一区免费观看| 怡红院av一区二区三区| 欧美成人一品| 欧美日韩视频在线第一区| 久久麻豆一区二区| 欧美区二区三区| 久久久91精品国产一区二区三区| 免费成人在线视频网站| 性做久久久久久| 美女日韩欧美| 久久精品国产清自在天天线| 欧美极品在线播放| 久久精品日产第一区二区| 欧美日韩国产一区二区三区| 久久亚洲高清| 国产精品久久久久久久浪潮网站| 欧美国产精品v| 国产欧美韩日| 亚洲麻豆一区| 亚洲国产经典视频| 午夜精品福利视频| 亚洲私人黄色宅男| 欧美成人激情视频免费观看| 久久性色av| 国产精品一区一区三区| 亚洲精品视频一区二区三区| 精品二区视频| 性欧美videos另类喷潮| 亚洲欧美日韩综合国产aⅴ| 免费成人在线视频网站| 狂野欧美性猛交xxxx巴西| 国产精品自拍在线| 亚洲视频日本| 亚洲一级片在线观看| 欧美日韩精品在线| 亚洲精品之草原avav久久| 在线观看福利一区| 久久人人爽人人爽| 久久综合精品国产一区二区三区| 国产伦精品一区二区三区免费迷 | 国产亚洲在线| 亚洲欧美激情四射在线日 | 国产精品久久久久久久久久免费 | 亚洲夜间福利| 欧美日韩不卡视频| 亚洲精品一区二区三区av| 亚洲精品免费在线| 欧美精品免费在线| 亚洲精品网址在线观看| 一区二区日韩| 国产精品福利网| 亚洲综合色视频| 久久国产精品黑丝| 国产一区日韩二区欧美三区| 欧美一区二区三区婷婷月色| 久久九九久精品国产免费直播| 国产日韩一区二区三区| 香蕉成人久久| 免费欧美在线| 亚洲美女黄网| 欧美四级伦理在线| 午夜精品久久久久久久蜜桃app| 久久久97精品| 亚洲精品男同| 国产精品毛片一区二区三区| 亚洲免费在线观看| 美女国产一区| 999亚洲国产精| 国产精品v亚洲精品v日韩精品| 亚洲一区欧美二区| 久久网站热最新地址| 亚洲精品偷拍| 国产精品v一区二区三区| 欧美亚洲综合网| 欧美高清不卡| 一区二区三区高清| 国产精品每日更新| 免费日韩成人| 亚洲免费中文| 欧美激情一区二区三级高清视频 | 国产精品国产三级国产aⅴ入口| 亚洲欧美区自拍先锋| 欧美大香线蕉线伊人久久国产精品| 亚洲美女视频在线观看| 国产亚洲欧美日韩美女| 欧美激情四色| 午夜国产一区| 亚洲伦理在线观看| 久久尤物视频| 亚洲毛片在线看| 国产欧美一区二区精品性| 欧美aⅴ一区二区三区视频| 一本色道88久久加勒比精品| 久久婷婷久久| 一区二区三区欧美成人| **网站欧美大片在线观看| 欧美新色视频| 欧美成人精品一区二区三区| 欧美伊人久久久久久久久影院| 亚洲精品自在在线观看| 老司机凹凸av亚洲导航| 亚洲综合成人在线| 亚洲精品乱码久久久久久久久| 韩日成人av| 国产日韩精品在线| 国产精品久久久久一区二区三区| 欧美激情第8页| 麻豆精品在线视频| 久久精品在线播放| 欧美一级视频免费在线观看| 99亚洲精品| 日韩亚洲欧美综合| 亚洲七七久久综合桃花剧情介绍| 久久久久九九九| 久久成人免费| 久久爱另类一区二区小说| 亚洲综合色视频| 一区二区三区欧美日韩| 一区二区三区国产| 亚洲卡通欧美制服中文| 亚洲精品麻豆| 99热免费精品| 99精品福利视频| 亚洲精品在线视频| 99爱精品视频| 一区二区免费在线视频| 亚洲午夜在线观看| 亚洲午夜一区二区| 香蕉成人伊视频在线观看| 欧美一区二区三区播放老司机| 午夜在线视频观看日韩17c| 欧美一区二区三区啪啪| 久久大逼视频| 久久综合影音| 欧美激情va永久在线播放| 欧美国产日韩一二三区| 欧美激情视频在线播放| 亚洲国产综合91精品麻豆| 亚洲免费成人av| 国产精品99久久不卡二区| 亚洲伊人伊色伊影伊综合网| 久久成人精品电影| 免费看成人av| 欧美揉bbbbb揉bbbbb| 国产精品尤物| 在线观看日韩精品| 一本色道久久综合| 午夜精品视频在线| 久久久蜜桃一区二区人| 欧美激情亚洲一区| 亚洲午夜女主播在线直播| 午夜影视日本亚洲欧洲精品| 久久国内精品视频| 欧美二区在线播放| 欧美性淫爽ww久久久久无| 国产在线精品一区二区中文| 亚洲日本中文字幕免费在线不卡| 亚洲免费电影在线| 亚洲一区精品视频| 欧美在线free| 91久久精品国产91久久| 亚洲伊人一本大道中文字幕| 麻豆91精品91久久久的内涵| 国产精品久久久爽爽爽麻豆色哟哟| 国产有码一区二区| 一二三区精品福利视频| 久久久精品动漫| 亚洲精品一区中文| 亚洲欧美在线一区| 欧美久久电影| 在线欧美电影| 欧美专区在线播放|