poj 3185 高斯消元 枚举变元
2016-08-12 00:17
351 查看
变元不确定要枚举否则不保证解最优
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; int a[25][25],va[25],ans[25] = {0},cnt; void dfs(int pre) { if(pre==20) { int pre3 = 0,pre4 = 0; for(int i=0;i<20;i++)pre4+=ans[i]; for(int i=0;i<20;i++) { int pre2 = 0; for(int j=0;j<20;j++) if(j!=i&&ans[j]&&a[i][j])pre2^=1; pre3+=(a[i][20]^pre2); } //printf("%d %d\n",pre3,pre4); cnt = min(cnt,pre3+pre4); return ; } ans[pre] = 1; dfs(pre+1); ans[pre] = 0; dfs(pre+1); } int gaos(int n) { int i,j; for(i=0,j=0;j<n&&i<n;j++) { int k; for(k=i;k<n;k++) if(a[k][j])break; if(a[k][j]) { for(int r=0;r<=n;r++)swap(a[i][r],a[k][r]); for(int k=0;k<n;k++) if(k!=i&&a[k][j]) for(int r=j;r<=n;r++) a[k][r]^=a[i][r]; i++; } } cnt = 1000; dfs(i); return cnt; } int main() { memset(a,0,sizeof(a)); for(int i=0;i<20;i++)scanf("%d",&va[i]); for(int i=0;i<20;i++) { a[i][20] = va[i]; for(int j=-1;j<=1;j++) if(i+j>=0&&i+j<20) a[i+j][i] = 1; } printf("%d\n",gaos(20)); return 0; }
相关文章推荐
- cairo-1.14.6 static compiler msys mingw32
- HTML引用资源相对路径
- Thread 方法
- Thread 方法
- [HDU5828] Rikka with Sequence [2016 Multi-University Training Contest 8(2016多校联合训练8) 1008]
- Java中wait和sleep的区别
- 虚幻4 OnlineSubsystem 平台相关的支付登陆等功能
- C# 用数据库读取Excel出现“定义了过多字段”错误的解决方法
- 2016暑假练习——线段树
- 大数据IMF传奇行动绝密课程第26课:Spark Runtime内幕揭秘
- 8.12.16 博客项目立项
- iptables Linux防火墙配置工具
- Educational Codeforces Round 11 D 计算几何
- C# 导出 Excel 封装类 代码
- 使用achartengine画图,双Y轴右侧标题文字显示不全
- asp HTTP 错误 500.21 - Internal Server Error
- android_assert目录下的文件
- 开源新闻速递:Lumina 桌面环境 1.0 正式发布
- FreeRTOS源码阅读(一)
- 大数据IMF传奇行动绝密课程第25课:Spark Sort-Based Shuffle内幕彻底解密