http://poj.org/problem?id=1222

http://poj.org/problem?id=1830

http://poj.org/problem?id=1681

http://poj.org/problem?id=1753

http://poj.org/problem?id=3185

这几个题目都类似,都可以使用高斯消元来求解一个模2的01方程组来解决。

有时候需要枚举自由变元,有的是判断存不存在解

POJ 1222 EXTENDED LIGHTS OUT

普通的问题。

肯定有唯一解。肯定枚举第一行去做,也可以使用高斯消元。

  1. /* ***********************************************
  2. Author :kuangbin
  3. Created Time :2013/8/17 18:25:42
  4. File Name :F:\2013ACM练习\专题学习\高斯消元\POJ1222.cpp
  5. ************************************************ */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <queue>
  13. #include <set>
  14. #include <map>
  15. #include <string>
  16. #include <math.h>
  17. #include <stdlib.h>
  18. #include <time.h>
  19. using namespace std;
  20.  
  21. //对2取模的01方程组
  22. const int MAXN = ;
  23. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var
  24. int equ,var;
  25. int a[MAXN][MAXN]; //增广矩阵
  26. int x[MAXN]; //解集
  27. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用)
  28. int free_num;//自由变元的个数
  29.  
  30. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数
  31. int Gauss()
  32. {
  33. int max_r,col,k;
  34. free_num = ;
  35. for(k = , col = ; k < equ && col < var ; k++, col++)
  36. {
  37. max_r = k;
  38. for(int i = k+;i < equ;i++)
  39. {
  40. if(abs(a[i][col]) > abs(a[max_r][col]))
  41. max_r = i;
  42. }
  43. if(a[max_r][col] == )
  44. {
  45. k--;
  46. free_x[free_num++] = col;//这个是自由变元
  47. continue;
  48. }
  49. if(max_r != k)
  50. {
  51. for(int j = col; j < var+; j++)
  52. swap(a[k][j],a[max_r][j]);
  53. }
  54. for(int i = k+;i < equ;i++)
  55. {
  56. if(a[i][col] != )
  57. {
  58. for(int j = col;j < var+;j++)
  59. a[i][j] ^= a[k][j];
  60. }
  61. }
  62. }
  63. for(int i = k;i < equ;i++)
  64. if(a[i][col] != )
  65. return -;//无解
  66. if(k < var) return var-k;//自由变元个数
  67. //唯一解,回代
  68. for(int i = var-; i >= ;i--)
  69. {
  70. x[i] = a[i][var];
  71. for(int j = i+;j < var;j++)
  72. x[i] ^= (a[i][j] && x[j]);
  73. }
  74. return ;
  75. }
  76. void init()
  77. {
  78. memset(a,,sizeof(a));
  79. memset(x,,sizeof(x));
  80. equ = ;
  81. var = ;
  82. for(int i = ;i < ;i++)
  83. for(int j = ;j < ;j++)
  84. {
  85. int t = i*+j;
  86. a[t][t] = ;
  87. if(i > )a[(i-)*+j][t] = ;
  88. if(i < )a[(i+)*+j][t] = ;
  89. if(j > )a[i*+j-][t] = ;
  90. if(j < )a[i*+j+][t] = ;
  91. }
  92. }
  93. int main()
  94. {
  95. //freopen("in.txt","r",stdin);
  96. //freopen("out.txt","w",stdout);
  97. int T;
  98. int iCase = ;
  99. scanf("%d",&T);
  100. while(T--)
  101. {
  102. iCase++;
  103. init();
  104. for(int i = ;i < ;i++)
  105. scanf("%d",&a[i][]);
  106. Gauss();
  107. printf("PUZZLE #%d\n",iCase);
  108. for(int i = ;i < ;i++)
  109. {
  110. for(int j = ;j < ;j++)
  111. printf("%d ",x[i*+j]);
  112. printf("%d\n",x[i*+]);
  113. }
  114. }
  115. return ;
  116. }

POJ 1830 开关问题

输出方案数,就是求出有多少个自由变元就可以了。

  1. /* ***********************************************
  2. Author :kuangbin
  3. Created Time :2013/8/17 19:44:33
  4. File Name :F:\2013ACM练习\专题学习\高斯消元\POJ1830.cpp
  5. ************************************************ */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <queue>
  13. #include <set>
  14. #include <map>
  15. #include <string>
  16. #include <math.h>
  17. #include <stdlib.h>
  18. #include <time.h>
  19. using namespace std;
  20. //对2取模的01方程组
  21. const int MAXN = ;
  22. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var
  23. int equ,var;
  24. int a[MAXN][MAXN]; //增广矩阵
  25. int x[MAXN]; //解集
  26. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用)
  27. int free_num;//自由变元的个数
  28.  
  29. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数
  30. int Gauss()
  31. {
  32. int max_r,col,k;
  33. free_num = ;
  34. for(k = , col = ; k < equ && col < var ; k++, col++)
  35. {
  36. max_r = k;
  37. for(int i = k+;i < equ;i++)
  38. {
  39. if(abs(a[i][col]) > abs(a[max_r][col]))
  40. max_r = i;
  41. }
  42. if(a[max_r][col] == )
  43. {
  44. k--;
  45. free_x[free_num++] = col;//这个是自由变元
  46. continue;
  47. }
  48. if(max_r != k)
  49. {
  50. for(int j = col; j < var+; j++)
  51. swap(a[k][j],a[max_r][j]);
  52. }
  53. for(int i = k+;i < equ;i++)
  54. {
  55. if(a[i][col] != )
  56. {
  57. for(int j = col;j < var+;j++)
  58. a[i][j] ^= a[k][j];
  59. }
  60. }
  61. }
  62. for(int i = k;i < equ;i++)
  63. if(a[i][col] != )
  64. return -;//无解
  65. if(k < var) return var-k;//自由变元个数
  66. //唯一解,回代
  67. for(int i = var-; i >= ;i--)
  68. {
  69. x[i] = a[i][var];
  70. for(int j = i+;j < var;j++)
  71. x[i] ^= (a[i][j] && x[j]);
  72. }
  73. return ;
  74. }
  75. void init()
  76. {
  77. memset(a,,sizeof(a));
  78. memset(x,,sizeof(x));
  79. }
  80. int start[MAXN],end[MAXN];
  81.  
  82. int main()
  83. {
  84. //freopen("in.txt","r",stdin);
  85. //freopen("out.txt","w",stdout);
  86. int n;
  87. int T;
  88. scanf("%d",&T);
  89. while(T--)
  90. {
  91. scanf("%d",&n);
  92. for(int i = ;i < n;i++)
  93. scanf("%d",&start[i]);
  94. for(int i = ;i < n;i++)
  95. scanf("%d",&end[i]);
  96. init();
  97. equ = var = n;
  98. for(int i = ;i < n;i++)
  99. a[i][i] = ;
  100. int u,v;
  101. while(scanf("%d%d",&u,&v) == )
  102. {
  103. if(u == && v == )break;
  104. a[v-][u-] = ;
  105. }
  106. for(int i = ;i < n;i++)
  107. a[i][n] = (start[i]^end[i]);
  108. int ans = Gauss();
  109. if(ans == -)
  110. printf("Oh,it's impossible~!!\n");
  111. else printf("%d\n",(<<ans));
  112. }
  113. return ;
  114. }

POJ 1681 Painter's Problem

需要步数最少的,要枚举自由变元求解。

  1. /* ***********************************************
  2. Author :kuangbin
  3. Created Time :2013/8/17 19:56:07
  4. File Name :F:\2013ACM练习\专题学习\高斯消元\POJ1681.cpp
  5. ************************************************ */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <queue>
  13. #include <set>
  14. #include <map>
  15. #include <string>
  16. #include <math.h>
  17. #include <stdlib.h>
  18. #include <time.h>
  19. using namespace std;
  20. //对2取模的01方程组
  21. const int MAXN = ;
  22. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var
  23. int equ,var;
  24. int a[MAXN][MAXN]; //增广矩阵
  25. int x[MAXN]; //解集
  26. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用)
  27. int free_num;//自由变元的个数
  28.  
  29. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数
  30. int Gauss()
  31. {
  32. int max_r,col,k;
  33. free_num = ;
  34. for(k = , col = ; k < equ && col < var ; k++, col++)
  35. {
  36. max_r = k;
  37. for(int i = k+;i < equ;i++)
  38. {
  39. if(abs(a[i][col]) > abs(a[max_r][col]))
  40. max_r = i;
  41. }
  42. if(a[max_r][col] == )
  43. {
  44. k--;
  45. free_x[free_num++] = col;//这个是自由变元
  46. continue;
  47. }
  48. if(max_r != k)
  49. {
  50. for(int j = col; j < var+; j++)
  51. swap(a[k][j],a[max_r][j]);
  52. }
  53. for(int i = k+;i < equ;i++)
  54. {
  55. if(a[i][col] != )
  56. {
  57. for(int j = col;j < var+;j++)
  58. a[i][j] ^= a[k][j];
  59. }
  60. }
  61. }
  62. for(int i = k;i < equ;i++)
  63. if(a[i][col] != )
  64. return -;//无解
  65. if(k < var) return var-k;//自由变元个数
  66. //唯一解,回代
  67. for(int i = var-; i >= ;i--)
  68. {
  69. x[i] = a[i][var];
  70. for(int j = i+;j < var;j++)
  71. x[i] ^= (a[i][j] && x[j]);
  72. }
  73. return ;
  74. }
  75. int n;
  76. void init()
  77. {
  78. memset(a,,sizeof(a));
  79. memset(x,,sizeof(x));
  80. equ = n*n;
  81. var = n*n;
  82. for(int i = ;i < n;i++)
  83. for(int j = ;j < n;j++)
  84. {
  85. int t = i*n+j;
  86. a[t][t] = ;
  87. if(i > )a[(i-)*n+j][t] = ;
  88. if(i < n-)a[(i+)*n+j][t] = ;
  89. if(j > )a[i*n+j-][t] = ;
  90. if(j < n-)a[i*n+j+][t] = ;
  91. }
  92. }
  93. void solve()
  94. {
  95. int t = Gauss();
  96. if(t == -)
  97. {
  98. printf("inf\n");
  99. return;
  100. }
  101. else if(t == )
  102. {
  103. int ans = ;
  104. for(int i = ;i < n*n;i++)
  105. ans += x[i];
  106. printf("%d\n",ans);
  107. return;
  108. }
  109. else
  110. {
  111. //枚举自由变元
  112. int ans = 0x3f3f3f3f;
  113. int tot = (<<t);
  114. for(int i = ;i < tot;i++)
  115. {
  116. int cnt = ;
  117. for(int j = ;j < t;j++)
  118. {
  119. if(i&(<<j))
  120. {
  121. x[free_x[j]] = ;
  122. cnt++;
  123. }
  124. else x[free_x[j]] = ;
  125. }
  126. for(int j = var-t-;j >= ;j--)
  127. {
  128. int idx;
  129. for(idx = j;idx < var;idx++)
  130. if(a[j][idx])
  131. break;
  132. x[idx] = a[j][var];
  133. for(int l = idx+;l < var;l++)
  134. if(a[j][l])
  135. x[idx] ^= x[l];
  136. cnt += x[idx];
  137. }
  138. ans = min(ans,cnt);
  139. }
  140. printf("%d\n",ans);
  141. }
  142. }
  143. char str[][];
  144. int main()
  145. {
  146. //freopen("in.txt","r",stdin);
  147. //freopen("out.txt","w",stdout);
  148. int T;
  149. scanf("%d",&T);
  150. while(T--)
  151. {
  152. scanf("%d",&n);
  153. init();
  154. for(int i = ;i < n;i++)
  155. {
  156. scanf("%s",str[i]);
  157. for(int j = ;j < n;j++)
  158. {
  159. if(str[i][j] == 'y')
  160. a[i*n+j][n*n] = ;
  161. else a[i*n+j][n*n] = ;
  162. }
  163. }
  164. solve();
  165. }
  166. return ;
  167. }

POJ 1753 Flip Game

数据范围很小,随便搞,也是要枚举自由变元。。。。这题用高斯消元真是杀鸡用牛刀了

  1. /* ***********************************************
  2. Author :kuangbin
  3. Created Time :2013/8/17 20:53:13
  4. File Name :F:\2013ACM练习\专题学习\高斯消元\POJ1753.cpp
  5. ************************************************ */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <queue>
  13. #include <set>
  14. #include <map>
  15. #include <string>
  16. #include <math.h>
  17. #include <stdlib.h>
  18. #include <time.h>
  19. using namespace std;
  20. //对2取模的01方程组
  21. const int MAXN = ;
  22. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var
  23. int equ,var;
  24. int a[MAXN][MAXN]; //增广矩阵
  25. int x[MAXN]; //解集
  26. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用)
  27. int free_num;//自由变元的个数
  28.  
  29. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数
  30. int Gauss()
  31. {
  32. int max_r,col,k;
  33. free_num = ;
  34. for(k = , col = ; k < equ && col < var ; k++, col++)
  35. {
  36. max_r = k;
  37. for(int i = k+;i < equ;i++)
  38. {
  39. if(abs(a[i][col]) > abs(a[max_r][col]))
  40. max_r = i;
  41. }
  42. if(a[max_r][col] == )
  43. {
  44. k--;
  45. free_x[free_num++] = col;//这个是自由变元
  46. continue;
  47. }
  48. if(max_r != k)
  49. {
  50. for(int j = col; j < var+; j++)
  51. swap(a[k][j],a[max_r][j]);
  52. }
  53. for(int i = k+;i < equ;i++)
  54. {
  55. if(a[i][col] != )
  56. {
  57. for(int j = col;j < var+;j++)
  58. a[i][j] ^= a[k][j];
  59. }
  60. }
  61. }
  62. for(int i = k;i < equ;i++)
  63. if(a[i][col] != )
  64. return -;//无解
  65. if(k < var) return var-k;//自由变元个数
  66. //唯一解,回代
  67. for(int i = var-; i >= ;i--)
  68. {
  69. x[i] = a[i][var];
  70. for(int j = i+;j < var;j++)
  71. x[i] ^= (a[i][j] && x[j]);
  72. }
  73. return ;
  74. }
  75. int n;
  76. void init()
  77. {
  78. memset(a,,sizeof(a));
  79. memset(x,,sizeof(x));
  80. equ = n*n;
  81. var = n*n;
  82. for(int i = ;i < n;i++)
  83. for(int j = ;j < n;j++)
  84. {
  85. int t = i*n+j;
  86. a[t][t] = ;
  87. if(i > )a[(i-)*n+j][t] = ;
  88. if(i < n-)a[(i+)*n+j][t] = ;
  89. if(j > )a[i*n+j-][t] = ;
  90. if(j < n-)a[i*n+j+][t] = ;
  91. }
  92. }
  93. const int INF = 0x3f3f3f3f;
  94. int solve()
  95. {
  96. int t = Gauss();
  97. if(t == -)
  98. {
  99. return INF;
  100. }
  101. else if(t == )
  102. {
  103. int ans = ;
  104. for(int i = ;i < n*n;i++)
  105. ans += x[i];
  106. return ans;
  107. }
  108. else
  109. {
  110. //枚举自由变元
  111. int ans = INF;
  112. int tot = (<<t);
  113. for(int i = ;i < tot;i++)
  114. {
  115. int cnt = ;
  116. for(int j = ;j < t;j++)
  117. {
  118. if(i&(<<j))
  119. {
  120. x[free_x[j]] = ;
  121. cnt++;
  122. }
  123. else x[free_x[j]] = ;
  124. }
  125. for(int j = var-t-;j >= ;j--)
  126. {
  127. int idx;
  128. for(idx = j;idx < var;idx++)
  129. if(a[j][idx])
  130. break;
  131. x[idx] = a[j][var];
  132. for(int l = idx+;l < var;l++)
  133. if(a[j][l])
  134. x[idx] ^= x[l];
  135. cnt += x[idx];
  136. }
  137. ans = min(ans,cnt);
  138. }
  139. return ans;
  140. }
  141. }
  142. char str[][];
  143. int main()
  144. {
  145. //freopen("in.txt","r",stdin);
  146. //freopen("out.txt","w",stdout);
  147. n = ;
  148. for(int i = ;i < ;i++)
  149. scanf("%s",str[i]);
  150. init();
  151. for(int i = ;i < ;i++)
  152. for(int j = ;j < ;j++)
  153. {
  154. if(str[i][j] == 'b')a[i*+j][] = ;
  155. else a[i*+j][] = ;
  156. }
  157. int ans1 = solve();
  158. init();
  159. for(int i = ;i < ;i++)
  160. for(int j = ;j < ;j++)
  161. {
  162. if(str[i][j] == 'b')a[i*+j][] = ;
  163. else a[i*+j][] = ;
  164. }
  165. int ans2 = solve();
  166. if(ans1 == INF && ans2 == INF)
  167. printf("Impossible\n");
  168. else printf("%d\n",min(ans1,ans2));
  169. return ;
  170. }

POJ 3185 The Water Bowls

一维的了,更简单的还是枚举比较好。

高斯消元随便搞

  1. /* ***********************************************
  2. Author :kuangbin
  3. Created Time :2013/8/17 21:53:09
  4. File Name :F:\2013ACM练习\专题学习\高斯消元\POJ3185.cpp
  5. ************************************************ */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <queue>
  13. #include <set>
  14. #include <map>
  15. #include <string>
  16. #include <math.h>
  17. #include <stdlib.h>
  18. #include <time.h>
  19. using namespace std;
  20. //对2取模的01方程组
  21. const int MAXN = ;
  22. //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var
  23. int equ,var;
  24. int a[MAXN][MAXN]; //增广矩阵
  25. int x[MAXN]; //解集
  26. int free_x[MAXN];//用来存储自由变元(多解枚举自由变元可以使用)
  27. int free_num;//自由变元的个数
  28.  
  29. //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数
  30. int Gauss()
  31. {
  32. int max_r,col,k;
  33. free_num = ;
  34. for(k = , col = ; k < equ && col < var ; k++, col++)
  35. {
  36. max_r = k;
  37. for(int i = k+;i < equ;i++)
  38. {
  39. if(abs(a[i][col]) > abs(a[max_r][col]))
  40. max_r = i;
  41. }
  42. if(a[max_r][col] == )
  43. {
  44. k--;
  45. free_x[free_num++] = col;//这个是自由变元
  46. continue;
  47. }
  48. if(max_r != k)
  49. {
  50. for(int j = col; j < var+; j++)
  51. swap(a[k][j],a[max_r][j]);
  52. }
  53. for(int i = k+;i < equ;i++)
  54. {
  55. if(a[i][col] != )
  56. {
  57. for(int j = col;j < var+;j++)
  58. a[i][j] ^= a[k][j];
  59. }
  60. }
  61. }
  62. for(int i = k;i < equ;i++)
  63. if(a[i][col] != )
  64. return -;//无解
  65. if(k < var) return var-k;//自由变元个数
  66. //唯一解,回代
  67. for(int i = var-; i >= ;i--)
  68. {
  69. x[i] = a[i][var];
  70. for(int j = i+;j < var;j++)
  71. x[i] ^= (a[i][j] && x[j]);
  72. }
  73. return ;
  74. }
  75. void init()
  76. {
  77. memset(a,,sizeof(a));
  78. memset(x,,sizeof(x));
  79. equ = ;
  80. var = ;
  81. for(int i = ;i < ;i++)
  82. {
  83. a[i][i] = ;
  84. if(i > ) a[i-][i] = ;
  85. if(i < )a[i+][i] = ;
  86. }
  87. }
  88. void solve()
  89. {
  90. int t = Gauss();
  91. if(t == -)
  92. {
  93. printf("inf\n");
  94. return;
  95. }
  96. else if(t == )
  97. {
  98. int ans = ;
  99. for(int i = ;i < ;i++)
  100. ans += x[i];
  101. printf("%d\n",ans);
  102. return;
  103. }
  104. else
  105. {
  106. //枚举自由变元
  107. int ans = 0x3f3f3f3f;
  108. int tot = (<<t);
  109. for(int i = ;i < tot;i++)
  110. {
  111. int cnt = ;
  112. for(int j = ;j < t;j++)
  113. {
  114. if(i&(<<j))
  115. {
  116. x[free_x[j]] = ;
  117. cnt++;
  118. }
  119. else x[free_x[j]] = ;
  120. }
  121. for(int j = var-t-;j >= ;j--)
  122. {
  123. int idx;
  124. for(idx = j;idx < var;idx++)
  125. if(a[j][idx])
  126. break;
  127. x[idx] = a[j][var];
  128. for(int l = idx+;l < var;l++)
  129. if(a[j][l])
  130. x[idx] ^= x[l];
  131. cnt += x[idx];
  132. }
  133. ans = min(ans,cnt);
  134. }
  135. printf("%d\n",ans);
  136. }
  137. }
  138.  
  139. int main()
  140. {
  141. //freopen("in.txt","r",stdin);
  142. //freopen("out.txt","w",stdout);
  143. init();
  144. for(int i = ;i < ;i++)
  145. scanf("%d",&a[i][]);
  146. solve();
  147. return ;
  148. }

专题:

高斯消元解方程:

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=29538#overview

POJ 1222 POJ 1830 POJ 1681 POJ 1753 POJ 3185 高斯消元求解一类开关问题的更多相关文章

  1. POJ 1681 Painter's Problem(高斯消元+枚举自由变元)

    http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...

  2. POJ 1681 Painter's Problem 【高斯消元 二进制枚举】

    任意门:http://poj.org/problem?id=1681 Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total ...

  3. POJ 1830 开关问题(高斯消元求解的情况)

    开关问题 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8714   Accepted: 3424 Description ...

  4. poj 1681 Painter&#39;s Problem(高斯消元)

    id=1681">http://poj.org/problem? id=1681 求最少经过的步数使得输入的矩阵全变为y. 思路:高斯消元求出自由变元.然后枚举自由变元,求出最优值. ...

  5. POJ 1681 Painter's Problem (高斯消元 枚举自由变元求最小的步数)

    题目链接 题意: 一个n*n 的木板 ,每个格子 都 可以 染成 白色和黄色,( 一旦我们对也个格子染色 ,他的上下左右 都将改变颜色): 给定一个初始状态 , 求将 所有的 格子 染成黄色 最少需要 ...

  6. POJ 1753 Flip game ( 高斯消元枚举自由变量)

    题目链接 题意:给定一个4*4的矩阵,有两种颜色,每次反转一个颜色会反转他自身以及上下左右的颜色,问把他们全变成一种颜色的最少步数. 题解:4*4的矩阵打表可知一共有四个自由变元,枚举变元求最小解即可 ...

  7. poj 1753 Flip Game 高斯消元

    题目链接 4*4的格子, 初始为0或1, 每次翻转一个会使它四周的也翻转, 求翻转成全0或全1最少的步数. #include <iostream> #include <vector& ...

  8. POJ 2065 高斯消元求解问题

    题目大意: f[k] = ∑a[i]*k^i % p 每一个f[k]的值就是字符串上第 k 个元素映射的值,*代表f[k] = 0 , 字母代表f[k] = str[i]-'a'+1 把每一个k^i求 ...

  9. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)

    [题目链接] http://poj.org/problem?id=1222 [题目大意] 给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了 ...

随机推荐

  1. python脚本-实现自动按规则创建指定大小和指定个数的文件案例

    # -*- coding: cp936 -*-#---------------------------------------------------------------------------- ...

  2. php pdo封装类

    class MYPDO { protected static $_instance = null; protected $dbname = ''; protected $dsn; protected ...

  3. Eloquent中一些其他的create方法

    firstOrCreate/ firstOrNew# 还有两种其它方法,你可以用来通过属性批量赋值创建你的模型:firstOrCreate 和firstOrNew.firstOrCreate 方法将会 ...

  4. laravel入门教程

    参考地址:https://github.com/johnlui/Learn-Laravel-5/issues/16

  5. linux CentOS 上安装chrome

    1.wget http://chrome.richardlloyd.org.uk/install_chrome.sh   (用wget下载shell文件)2.chmod u+x install_chr ...

  6. C++输入与输出

    1 概述 C和C++都没有将输入和输出建立在语言中,C++将输入输出的解决方案放在类库中(由头文件iostream和fstream中定义的类) C++程序把输入和输出看作字节流.流充当了程序和流源流目 ...

  7. controller中,Failed to Initialize. Reason: TimeOut虚拟用花初始化超时

    1.调整 Run-timesetting->Internet Protocol->references->Advaanced->Options 将HTTP-request co ...

  8. bzoj 1415 期望dp + 记忆化搜索

    思路:这个题看着感觉不能dp,其实是可以dp的,因为狼每次走两步,兔子每次走一步,每进行一轮以后,狼和兔子的距离 肯定是在接近的,没有相同的状态,dp之前预处理出来,每一步狼该往哪里走. #inclu ...

  9. 微信公共服务平台开发(.Net的实现)1 认证“成为开发者”

    http://www.cnblogs.com/freeliver54/p/3725979.html http://www.it165.net/pro/html/201402/9459.html 这些代 ...

  10. SQL join关键字

    如果一张表有很多个字段可能填入起来十分的困难复杂,不如把它拆分成两个表,然后查看的时候合并起来. 比如我要记录学生的姓名,班级,成绩,父母的电话号码,那么我们可以创建一个表1 储存学生的姓名班级成绩, ...