Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
高斯消元+枚举 ~~贴个代码吧#include <iostream> #include <stdio.h> #include <fstream> #include <string.h> #define n 20 using namespace std; int A[30][30],a[30],x[30],var,ans,var0; void swap(int &a,int &b) { int tmp=a; a=b; b=tmp; } int gaos(int r,int c) { int i=1,j=1,l,k,id; while(i<=r&&j<=c) { id=i; for(l=i+1; l<=r; l++) { if(A[l][j]>A[id][j])id=l; } if(A[id][j]) { for(l=j; l<=c+1; l++)swap(A[id][l],A[i][l]); for(l=i+1; l<=r; l++) { if(A[l][j]) { for(k=j; k<=c+1; k++)A[l][k]=A[l][k]^A[i][k]; } } i++; } j++; } var=i; if(var<i+1) { return 0; } memset(x,0,sizeof(x)); for(i=c; i>=1; i--) { for(j=i+1; j<=r; j++)A[i][c+1]^=(A[i][j]&&x[j]); x[i]=A[i][c+1]; } int ans=0; for(i=1; i<=c; i++)if(x[i])ans++; return ans; } int cp[30][30],cpx[30]; void dfs(int var) { int i,j; if(var==n+1) { for(i=1; i<=n; i++) { cpx[i]=x[i]; for(j=1; j<=n+1; j++) { cp[i][j]=A[i][j]; } } for(i=var0-1; i>=1; i--) { for(j=i+1; j<=n; j++) { cp[i][n+1]^=(cpx[j]&&cp[i][j]); } cpx[i]=cp[i][n+1]; } int tt=0; for(i=1; i<=n; i++)if(cpx[i])tt++; ans=min(ans,tt); return; } x[var]=1; dfs(var+1); x[var]=0; dfs(var+1); } int main() { //freopen("in.txt","r",stdin); int i,j,xx; memset(A,0,sizeof(A)); for(i=1; i<=n; i++) { scanf("%d",&xx); if(xx)A[i][n+1]=1; } for(i=1; i<=n; i++) { A[i][i]=1; if(i>1)A[i][i-1]=1; if(i<n)A[i][i+1]=1; } ans=gaos(n,n); if(ans)printf("%d\n",ans); else { ans=50; var0=var; dfs(var); printf("%d\n",ans); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator