poj 3185 The Water Bowls (高斯消元)
2015-03-17 23:16
513 查看
高斯消元水过
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #include<string.h> #include<vector> #include<queue> #include<map> #include<set> using namespace std; #define B(x) (1<<(x)) void cmax(int& a,int b){ if(b>a)a=b; } void cmin(int& a,int b){ if(b<a)a=b; } typedef long long ll; const int oo=0x3f3f3f3f; const ll OO=1LL<<61; const int MOD=10007; const int maxn=444; int maze[maxn][maxn]; int x[maxn],fx[maxn]; int Gauss(int n,int m){ int r,c,num=0; memset(x,0,sizeof x); for(r=0,c=0;r<n&&c<m;r++,c++){ int id=r; for(int i=r+1;i<n;i++){ if(maze[i][c]>maze[id][c]){ id=i; } } if(id!=r){ for(int j=c;j<=m;j++){ swap(maze[id][j],maze[r][j]); } } if(maze[r][c]==0){ r--; fx[num++]=c; continue; } for(int i=r+1;i<n;i++){ if(maze[i][c]!=0){ for(int j=c;j<=m;j++){ maze[i][j]^=maze[r][j]; } } } } for(int i=r;i<n;i++){ if(maze[i][c]!=0)return -1; } int S=B(c-r),cnt,ans=oo; for(int s=0;s<S;s++){ cnt=0; int st=s; for(int i=0;i<c-r;i++){ x[fx[i]]=st&1; if(x[fx[i]])cnt++; st>>=1; } for(int i=r-1;i>=0;i--){ x[i]=maze[i][m]; for(int j=i+1;j<m;j++){ x[i]^=(maze[i][j]&&x[j]); } if(x[i])cnt++; } cmin(ans,cnt); } return ans; } void Init(int n){ memset(maze,0,sizeof maze); for(int i=0;i<n;i++){ maze[i][i]=1; if(i>0)maze[i-1][i]=1; if(i<n-1)maze[i+1][i]=1; } } bool input(int n){ Init(n); for(int i=0;i<n;i++){ if(scanf("%d",&maze[i] )==EOF) return false; } return true; } int main(){ //#define ON 1 #ifdef ON freopen("G:\\read.txt","r",stdin); #endif // ON while(input(20)){ int ans=Gauss(20,20); printf("%d\n",ans); } return 0; } /** */
相关文章推荐
- POJ 3185 The Water Bowls 高斯消元
- poj 3185 The Water Bowls 高斯消元
- POJ 3185 The Water Bowls(高斯消元,枚举变元)
- POJ 3185 The Water Bowls(高斯消元)
- poj 3185 The Water Bowls(高斯消元)
- poj -- 3185 The Water Bowls(高斯消元)
- poj 3185 The Water Bowls(高斯消元)
- poj 3185 The Water Bowls(数学:高斯消元)
- POJ 3185 The Water Bowls(高斯消元-枚举变元个数)
- POJ 3185 The Water Bowls (高斯消元)
- POJ 3185 The Water Bowls (高斯消元)
- POJ 3185 The Water Bowls(高斯消元)
- POJ 3185 The Water Bowls (高斯消元 求最小步数)
- poj 3185 The Water Bowls 【高斯消元 + 枚举自由变元】
- POJ 3185 The Water Bowls 高斯消元
- poj 3185 The Water Bowls(高斯消元 开关问题)
- poj 3185 The Water Bowls(高斯消元)
- POJ-3185 The Water Bowls 高斯消元
- POJ - 1830 - 开关问题 ,POJ - 3185 - The Water Bowls,POJ - 1753 -Flip Game - (高斯消元解异或方程组)
- POJ 3185 The Water Bowls 高斯消元+枚举变元