UVA - 11464 Even Parity 枚举+递推

来源:互联网 发布:来深圳做销售知乎 编辑:程序博客网 时间:2024/06/05 18:09

原题地址:

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=24665


代码:

#include "stdio.h"#include "string.h"#include "iostream"using namespace std;int a[17][17],ans,inf=1000000,n,b[17][17];void input(){memset(b,0,sizeof(b));ans=inf;scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);}}int get_ans(){int temp=0;for(int i=1;i<=n;i++)if(a[1][i]!=b[1][i])temp++;for(int i=2;i<=n;i++){for(int j=1;j<=n;j++){b[i][j]=b[i-1][j-1]^b[i-1][j+1]^b[i-2][j];if(b[i][j]==1){if(a[i][j]==0){temp++;}}else if(a[i][j]==1){temp=inf;return temp;}}}return temp;}void cheak(int x,int i){if(x==0)cheak(1,i);b[1][i]=x;if(i==n){ans=min(ans,get_ans());return;}cheak(a[1][i+1],i+1);}void solve(){   cheak(a[1][1],1);if(ans==inf)printf("-1\n");elseprintf("%d\n",ans);}int main(){int T;scanf("%d",&T);for(int i=1;i<=T;i++){input();printf("Case %d: ",i);solve();}return 0;}


0 0
原创粉丝点击