zoukankan      html  css  js  c++  java
  • [JOYOI] 1035 棋盘覆盖

    题目限制
    时间限制    内存限制    评测方式    题目来源
    1000ms  131072KiB   标准比较器   Local
    题目描述
    给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖。
    
    输入格式
    第一行为n,m(表示有m个删除的格子)
    第二行到m+1行为x,y,分别表示删除格子所在的位置
    x为第x行
    y为第y列 
    
    输出格式
    一个数,即最大覆盖格数
    
    提示
    经典问题
    
    样例数据
    输入样例 #1 输出样例 #1
    8 0         32

    状压DP不行了,二分图。
    先把棋盘黑白染色(不用真的跑dfs,判断(i+j)&1就行)
    然后在除了禁止放的点以外的黑白点之间连边(也不用真的建图)
    然后匈牙利算法跑二分图最大匹配就行

    用n进制思想,把二维降到一维
    对了,数组开够大 n^2

    //Stay foolish,stay hungry,stay young,stay simple
    #include<iostream>
    #include<cstring>
    using namespace std;
    
    const int MAXN=10005;
    
    int n,m;
    int map[MAXN][MAXN];
    
    const int dx[4]={1,0,-1,0};
    const int dy[4]={0,-1,0,1};
    
    bool vis[MAXN];
    int match[MAXN];
    bool hungary(int now){
        int x=now/n,y=now%n;
        for(int i=0;i<4;i++){
            int nx=x+dx[i],ny=y+dy[i];
            int nv=nx*n+ny;
            if(nx>=n||ny>=n||nx<0||ny<0) continue;
            if(map[nx][ny]) continue;
            if(vis[nv]) continue;
            vis[nv]=1;
            if(match[nv]==-1||hungary(match[nv])){
                match[nv]=now;
                return true;
            }
    
        }
        return false;
    }
    
    int main(){
        cin>>n>>m;
        for(int i=1;i<=m;i++){
            int x,y;
            cin>>x>>y;
            map[x-1][y-1]=1;
        }
        int ans=0;
        memset(match,-1,sizeof(match)) ;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(((i+j)&1) && !map[i][j]){
                    memset(vis,0,sizeof(vis));
                    ans+=hungary(i*n+j);
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    

    本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9247475.html

  • 相关阅读:
    使用UIImagePickerController时3DTouch引起的Crash问题的解决--备用
    阿帕奇证书配置
    终端编写c程序
    native2ascii 在 Mac终端的转码
    mac 下 配置 阿帕奇
    苹果电脑的坑
    iOS证书快要过期怎么办?
    An unspecified error occurred!
    一个苹果证书怎么多次使用
    多媒体开发之---live555的多线程支持,原本只是单线程,单通道
  • 原文地址:https://www.cnblogs.com/ghostcai/p/9247475.html
Copyright © 2011-2022 走看看