poj 3279 Filptile (USACO 2007 Open Silver)
来源:互联网 发布:javascript submit 编辑:程序博客网 时间:2024/05/16 08:21
题意:
n*m块区域,每一块有正反两面,两面分别是白色和黑色。
翻转一块区域的同时, 与其相邻的四块区域也会同时被反转
问最少需要翻转的次数 ,使所有的区域都变成白色 输出其翻转方案
思路:
枚举第一行的翻转状态
如果已经知道了第一行的状态,那么后面几行的状态就随之确定了——(如果该区域的上面一个区域是黑色,那这个区域必然是要反转才能让他上面的区域变成白色)
然后比较和记录最少的翻转次数 输出即可
code:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 20;const int INF = 0x3f3f3f3f;int maze[maxn][maxn], tmaze[maxn][maxn];int ans[maxn][maxn], min_ans[maxn][maxn];int n,m;void deal(int x, int y){ tmaze[x][y] ^= 1; tmaze[x+1][y] ^= 1; tmaze[x-1][y] ^= 1; tmaze[x][y+1] ^= 1; tmaze[x][y-1] ^= 1;}void deal1(int s){ int cnt = m; for(int i = 0; i < m; i++){ ans[1][cnt--] = (s>>i)&1; }}bool deal2(){ for(int i = 1; i <= m; i++){ if(ans[1][i] == 1){ deal(1,i); } } for(int i = 2; i <= n; i++){ for(int j = 1; j <= m; j++){ if(tmaze[i-1][j] == 1){ ans[i][j] = 1; deal(i,j); } } } bool flag = true; for(int i = 1; i <= m; i++){ if(tmaze[n][i] != 0){ flag = false; } } return flag;}void init(){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ scanf("%d",&maze[i][j]); } }}void solve(){ bool flag; bool flag2 = false; int min_ = INF; memset(min_ans, 0, sizeof(min_ans)); for(int s = 0; s < (1<<m); s++){ memset(ans, 0, sizeof(ans)); memcpy(tmaze, maze, sizeof(maze)); deal1(s);//获取第一行状态 放到ans[1][i] 中 flag = deal2();//依据第一行进行翻转 if(flag){//成功 则输出 flag2 = true; int tmp = 0; for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(ans[i][j] == 1) tmp++; } } if(tmp < min_){ memcpy(min_ans, ans, sizeof(ans)); min_ = tmp; } } } if(!flag2) printf("IMPOSSIBLE\n"); else{ for(int i = 1; i <= n; i++){ for(int j = 1; j <= m; j++){ if(j != 1) printf(" "); printf("%d",min_ans[i][j]); } printf("\n"); } }}int main(){ scanf("%d%d",&n,&m); init(); solve(); return 0;}
虽然这道题目起码做过3回了,但还是不记得怎么做的....简直无情T_T比赛的时候没有出...被虐成马
0 0
- poj 3279 Filptile (USACO 2007 Open Silver)
- poj 3279 Filptile
- 【poj 3268】 Silver Cow Party 【USACO 2007 February Silver】
- POJ 2436 USACO silver
- [USACO 2007 Open Silver] City Horizon - 离散化+线段树
- 【USACO 2007 Open Silver】City Horizon 线段树
- USACO 2016 open Silver 解题报告
- USACO 2011 Open Silver 1.Corn Maze (bfs)
- USACO 2015 US OPEN CONTEST,Silver Division Solution
- USACO 2009 Open Silver 3.Cow Digit Game简单博弈论
- USACO 2010 Open Silver 3.Time Travel 链表?
- 【USACO 2007 February Silver】农场派对
- USACO 2007 Dec Silver 2.Building Roads
- Usaco 2007 Dec silver 穿越泥地
- 【poj3264】Balanced Lineup 【USACO 2007 January Silver】
- 【USACO 2007 November Silver】Cow Hurdles奶牛跨栏
- USACO 2007 Dec Silver Mud Puddles bfs or A-star
- 【USACO】2007 Feb Silver Lilypad Pond 白银莲花池
- 那些年的狗血bug-----shadow
- FZU - 2144 Shooting Game(贪心,区间覆盖问题变题)
- iOS--字符编码,NSString和UTF-8间的转换
- openGL es2.0 创建纹理灯光球
- java common-fileupload实现上传多个文件,在同一个input框中实现
- poj 3279 Filptile (USACO 2007 Open Silver)
- 最小二乘法
- vs 2008 mfc 编写资源dll
- Ruby on rails argument out of range错误
- 年轻时就应该要懂得这些道理
- jsp中文件路径的几种形式
- 源码阅读与分析一:利用eclipse查看ssh等源码
- 明白机会成本太迟了.........
- 嵌入式工程是的要求