zoukankan      html  css  js  c++  java
  • POJ2226

    题意:给定一个矩阵,当中有一些地方有水,如今有一些长度随意,宽为1的木板,要求在全部板不跨越不论什么坑的前提下,用一些木板盖住这些有水的地方,问至少须要几块板子?

    思路:

        

    然后你们懂的,二分匹配好了。

    代码例如以下:

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    const int N = 600;
    int n, m, p, q;
    bool lin[N][N];
    int used[N], arr[N], mark[N][N];
    char map[N][N];
    
    bool find(int x)
    {
    	for(int j = 1; j <= q; j++)
    	{
    		if(lin[x][j] && used[j] == 0)
    		{
    			used[j] = 1;
    			if(arr[j] == 0 || find(arr[j]))
    			{
    				arr[j] = x;
    				return true;
    			}
    		}
    	}
    	return false;
    }
    
    int main()
    {
    	int r, c;
    	while(~scanf("%d%d", &n, &m))
    	{
    		memset(map, '0', sizeof(map));
    		for(int i = 0; i < n; i++)
    		{
    			scanf("%s", &map[i]);
    		}
    		memset(lin, false , sizeof(lin));
    		memset(arr, 0, sizeof(arr));
    		p = 0;
    		for(int i = 0; i < n; i++)
    		{
    			for(int j = 0; j < m; j++)
    			{
    				if(map[i][j] == '*')
    				{
    					if(map[i][j-1] != '*')
    					{
    						p++;
    					}
    					mark[i][j] = p;
    				}	
    			}
    		}
    		q = 0;
    		for(int j = 0; j < m; j++)
    		{
    			for(int i = 0; i < n; i++)
    			{
    				if(map[i][j] == '*')
    				{
    					if(map[i-1][j] != '*')
    					{
    						q++;
    					}
    					lin[mark[i][j]][q] = true;
    				}
    			}
    		}
    		int all = 0;
    		for(int i = 1; i <= p; i++)
    		{
    			memset(used, 0, sizeof(used));
    			if(find(i))
    				++all;
    		}
    		printf("%d
    ", all);
    	}
    	return 0;
    }


  • 相关阅读:
    HZOI20190906模拟38 金,斯诺,赤
    HZOI20190903模拟36 字符,蛋糕,游戏
    HZOI20190902模拟35题解
    HZOI20190829模拟33题解
    HZOI20190828模拟32题解
    HZOI20190823模拟31题解
    HZOI20190823 C magic
    HZOI20190822模拟29题解
    HZOI20190821模拟28题解
    P2925 [USACO08DEC]干草出售Hay For Sale 题解
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6729393.html
Copyright © 2011-2022 走看看