POJ2965(枚举+位运算)
来源:互联网 发布:淘宝桔子表行是正品吗 编辑:程序博客网 时间:2024/05/24 01:50
这题和1753几乎是一样的,只是稍微麻烦一点,只需要在深搜时,将改变的步数记录下来就OK了。
题目链接:http://poj.org/problem?id=2965
简单介绍:
也是翻转的操作,只是是在每一个格子翻转后,引起同一行,同一列的格子发生变化。
问题是看是否能变为全1(假设-表示为1)
直接贴代码:
/* 简单枚举 +记为0 ; -记为1 ; open 65535*/#include<cstdio>#include<iostream>using namespace std ;int position[16], posi[16] ;int f[16] = {4383,8751,17487,34959,4593,8946,17652,35064,7953,12066,20292,36744,61713,61986,62532,63624} ;int min_times = 16, times = 0 ;int begin = 0 ;void DFS(int val,int dep){ if( val == 65535 ) { if( min_times >= times ) { for( int i = 0; i < 16; i++ ) position[i] = posi[i] ; min_times = times ; } } if( dep == 16 ) return ; int temp = val ; val = val ^ f[dep] ; times++ ; posi[dep] = 1 ; DFS(val,dep+1) ; times-- ; posi[dep] = 0 ; DFS(temp,dep+1) ; }int main(){ char ch ; for( int i = 0; i < 16; ) {cin.get(ch) ;if( ch == '-' ){ begin += (1<<i) ; i++ ; } else if( ch == '+' ){ i++ ; } } DFS(begin,0) ; printf("%d\n",min_times) ; for( int i = 0; i < 16; i++ ) { if( position[i] == 1 ) printf("%d %d\n",(i/4)+1,(i%4)+1) ; } return 0 ;}
大家如果有不同的想法,欢迎一起谈论!
- POJ2965(枚举+位运算)
- poj2965 (枚举+高效)
- poj2965 The Pilots Brothers' refrigerator(位运算)
- POJ2965 枚举
- POJ1753(枚举+位运算)
- poj2965 The Pilots Brothers' refrigerator(枚举)
- POJ2965解题报告(BFS,位压缩)
- uva - Magic Numbers(枚举、位运算)
- 二进制枚举例1(位运算)
- 熄灯问题(枚举、位运算)
- C-枚举,位运算
- 枚举,位运算
- 枚举与位运算
- 枚举,位运算
- 枚举的位运算
- 枚举与位运算
- 位运算+枚举
- 枚举的位运算
- Android SimpleAdapter显示问题
- 黑马程序员_java网络编程技术的理解
- Property Service学习(一)
- 华为Ascend Mate | 6.1英寸大屏手机 | 零距离高清图赏
- 黑马程序员_Java反射技术
- POJ2965(枚举+位运算)
- UVa:10673 Play with Floor and Ceil
- 寻找调用DebugPort的函数
- 换系统---保留旧数据
- Android-SDK-Manager 不能更新最有效的解决方法
- [ACM - 数论]Eddy's digital Roots(九余数定理)
- 华为 Ascend Mate 初体验|主流跑分软件测试|特色功能体验|拍照能力对比
- twitter面试题之装水问题
- 华为 Ascend Mate 电池续航测试|5小时日常使用测试+8小时待机测试