PKU 3185 The Water Bowls
2012-07-25 08:46
253 查看
题目:http://poj.org/problem?id=3185 题意:有20只碗排成一排, 奶牛翻转其中的一只碗, 其左右的碗都会跟着翻转,现在给出20只晚的初始状态,问需要至少多少次的翻转才能使所有碗都朝上。 思路:高斯消元+枚举自由变元。很容易想到如何建立方程组,一共有20个变元和20个方程组,如果有多个自由变元,需要枚举自由变元算出翻转次数,然后取最小值~~~#include <iostream> #include <stdio.h> #include <string.h> using namespace std; const int maxn=20; int map[maxn+10][maxn+10], a[maxn+10][maxn+10]; int ans, cnt, tem; void dfs(int r) { if (r==20) { for (int i=0; i<20; i++) for (int j=0; j<=20; j++) a[i][j]=map[i][j]; int num=0; for (int i=tem-1; i>=0; i--) { for (int j=i+1; j<20; j++) a[i][20]^=(a[i][j]&&a[j][20]); } for (int i=0; i<20; i++) if (a[i][20]) num++; cnt=min(cnt, num); return; } map[r][20]=0; dfs(r+1); map[r][20]=1; dfs(r+1); } int Gauss() { int row, col; for (row=0, col=0; row<20, col<20; row++, col++) { int maxr=row; for (int i=row+1; i<20; i++) if (map[i][col]) {maxr=i; break;} if (maxr!=row) for (int i=0; i<=20; i++) swap(map[row][i], map[maxr][i]); if (!map[row][col]) {row--; continue;} for (int i=row+1; i<20; i++) { if (!map[i][col]) continue; for (int j=col; j<=20; j++) map[i][j]^=map[row][j]; } } cnt=100; tem=row; dfs(tem); return cnt; } int main() { //freopen("in.txt", "r", stdin); memset(map, 0, sizeof(map)); for (int i=0; i<20; i++) scanf("%d", &map[i][20]); for (int i=0; i<20; i++) { map[i][i]=1; if (i-1>=0) map[i-1][i]=1; if (i+1<20) map[i+1][i]=1; } ans=Gauss(); printf("%d\n", ans); return 0; }
相关文章推荐
- PKU 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(高斯消元-枚举变元个数)
- POJ3185——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(高斯消元)