标题来源:

pid=3360">HDU 3360 National Treasures

意甲冠军:假设a[i][j] != -1 把他转成二进制 最多有12位 代表题目那张图的12个位置 假设相应位是1 说明在那里放一个守卫能够看住a[i][j]位置上的这个东西

思路:明显死最小点覆盖 奇偶匹配建图

#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int maxn = 55;
int vis[maxn*maxn];
int y[maxn*maxn];
vector <int> G[maxn*maxn];
int n, m;
int a[maxn][maxn];
int dir[12][2] = {-1, -2, -2, -1, -2, 1, -1, 2, 1, 2, 2, 1, 2, -1, 1, -2, -1, 0, 0, 1, 1, 0, 0, -1};
bool dfs(int u)
{
for(int i = 0; i < G[u].size(); i++)
{
int v = G[u][i];
if(vis[v])
continue;
vis[v] = true;
if(y[v] == -1 || dfs(y[v]))
{
y[v] = u;
return true;
}
}
return false;
}
int match()
{
int ans = 0;
memset(y, -1, sizeof(y));
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
if((i+j)%2)
{
memset(vis, 0, sizeof(vis));
if(dfs(i*m+j))
ans++;
}
}
}
return ans;
} int main()
{
int cas = 1;
while(scanf("%d %d", &n, &m) && (n||m))
{
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
scanf("%d", &a[i][j]);
for(int i = 0; i < n*m; i++)
G[i].clear();
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
int x = a[i][j];
if(x == -1)
continue;
for(int k = 0; k < 12; k++, x >>= 1)
{
if(!x)
break;
if(!(x&1))
continue; int xx = i + dir[k][0];
int yy = j + dir[k][1];
if(xx < 0 || xx >= n || yy < 0 || yy >= m)
continue;
if(a[xx][yy] == -1)
continue;
if((i+j)%2)
G[i*m+j].push_back(xx*m+yy);
else
G[xx*m+yy].push_back(i*m+j);
}
}
}
printf("%d. %d\n", cas++, match());
}
return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

最新文章

  1. Sql Server自动备份数据库,定期删除备份
  2. (转)Silverlight 与 JS交互
  3. some things
  4. 第一波实习的前端笔记(2)——js.md
  5. 怎样将文件夹打包为jar包或war包
  6. JDBC的批量处理数据
  7. linux/shell 文本文件删除/删掉空行
  8. Ubuntu下Qt编译报错“cannot find -lGL”的解决方案
  9. 【Xamarin挖墙脚系列:学习资料大放送】
  10. linux下 mysql 学习(一)
  11. ValueError: Cannot feed value of shape ..
  12. 【翻译】在Ext JS集成第三方库
  13. andorid简易定位
  14. Vue+element-ui 重置组件样式的写法
  15. linux 下安装nginx
  16. SQL Server 的字段不为NULL时唯一
  17. UVa 821 网页跳跃(Floyd)
  18. Qt_QString::split测试
  19. 通过修改基表(link$)让非public dblink变为public
  20. 除了GPS外的4种获得用户地理位置数据的方法

热门文章

  1. JDK8 直接定义接口中静态方法
  2. C++设计模式实现--备忘录(Memento)模式
  3. AOP 专题
  4. Linux基本命令(二)
  5. 程序猿的还有一出路:大数据project师
  6. sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)
  7. linux使用.rpm包安装mysql
  8. iOS开发系列之三 - UITextField 使用方法小结
  9. ITFriend创业败局(四):菜鸟CEO的自我修养
  10. 学习鸟哥的Linux私房菜笔记(13)——用户管理