uva 11464 - Even Parity(3级)
2013-05-14 21:41
281 查看
D | Even Parity Input: Standard Input Output: Standard Output |
The parity of a cell is the number of 1s surrounding that cell. A cell is surrounded by at most 4 cells (top, bottom, left, right).
Suppose we have a grid of size 4 x 4:
1 | 0 | 1 | 0 | The parity of each cell would be | 1 | 3 | 1 | 2 |
1 | 1 | 1 | 1 | 2 | 3 | 3 | 1 | |
0 | 1 | 0 | 0 | 2 | 1 | 2 | 1 | |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Input
The first line of input is an integer T (T<30) that indicates the number of test cases. Each case starts with a positive integer N(1≤N≤15). Each of the next N lines contain N integers (0/1) each. The integers are separated by a single
space character.
Output
For each case, output the case number followed by the minimum number of transformations required. If it's impossible to achieve the desired result, then output -1 instead.Sample Input Output for Sample Input
3 3 0 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 3 1 1 1 1 1 1 0 0 0 | Case 1: 0 Case 2: 3 Case 3: -1 |
Special Thanks: Derek Kisman, Md. Arifuzzaman Arif
思路:状态压缩枚举第一行的状态,然后根据前面的状态推出后面的状态。然后用初状态与目标状态比较。
#include<iostream> #include<cstdio> #include<cstring> #define FOR(i,n) for(int i=0;i<n;++i) using namespace std; const int mm=17; const int oo=1e9; int g[mm][mm],t[mm][mm]; int n; void check(int z,int&ans) { memset(t,0,sizeof(t));///目标状态 FOR(i,n) if(z&(1<<i))t[0][i]=1; else if(g[0][i])return;///1无法变为0 int num; for(int i=1;i<n;++i)FOR(j,n) {num=0; if(i>1)num+=t[i-2][j];///up if(j)num+=t[i-1][j-1];///left if(j<n-1)num+=t[i-1][j+1]; if(num&1){t[i][j]=1;continue;} if(g[i][j])return; } int ret=0; FOR(i,n)FOR(j,n) if(g[i][j]^t[i][j]) ++ret; ans=ans<ret?ans:ret; } int main() { int cas; while(~scanf("%d",&cas)) { FOR(ca,cas) { scanf("%d",&n); FOR(i,n)FOR(j,n) scanf("%d",&g[i][j]); int ans=oo; FOR(i,1<<n) check(i,ans); if(ans==oo) ans=-1; printf("Case %d: %d\n",ca+1,ans); } } }
相关文章推荐
- uva 11464 - Even Parity(3级)
- uva - 11464 - Even Parity(部分枚举,递推)
- UVa 11464 Even Parity (想法题&部分枚举)
- UVA 11464 Even Parity(递归枚举)
- Uva11464 - Even Parity
- Uva 11464 Even Parity
- UVA 11464 Even Parity 暴力 .
- uva 11464 - Even Parity (枚举+递推)
- UVA - 11464 Even Parity
- uva 11464 Even Parity(逐层递推)
- UVA 11464(p15)----Even Parity
- UVA - 11464 - Even Parity
- UVa 11464 - Even Parity
- UVA - 11464 Even Parity 枚举+递推
- UVa 11464 Even Parity
- UVa 11464 - Even Parity(枚举)
- 状态压缩+枚举 UVA 11464 Even Parity
- UVa11464 Even Parity
- UVA 11464 - Even Parity(枚举方法)
- UVa 11464 Even Parity