题目1542:黑白迷阵 (状态DP)
来源:互联网 发布:java编译器sand中文版 编辑:程序博客网 时间:2024/04/30 05:32
#define black 1#define white 0int color[4][5] ; /*初始颜色*/int flip[4][5] ; /*翻转状态,1翻,0不翻*/int d[5][2]={{0,0},{-1,0} ,{1,0} ,{0,-1},{0,1}} ; int cango(int x , int y){ return 0 <= x && x < 4 && 0 <= y && y < 5 ;}int get_color(int x , int y){ /*获取(x,y)处最终颜色*/ int c = color[x][y] ; for(int i = 0 ; i < 5 ; i++){ int xx = x+d[i][0] ; int yy = y+d[i][1] ; if(cango(xx ,yy) && flip[xx][yy]) c ^= 1 ; //翻 } return c ;}int is_all_black(){ //第一行翻转的初始状态确定后,判断这个初始状态可不可以成功 int i , j ; for(i = 1 ; i < 4 ; i++){ for(j = 0 ; j < 5 ; j++){ if(get_color(i-1 , j) == white) //如果(i,j)正上方(i-1 , j)最后颜色为白,则(i,j)必须翻 flip[i][j] = 1 ; } } for(i = 0 ; i < 5 ; i++){ if(get_color(3 , i) == white) //所有行除去最后一行全变黑,但是最后一行不能动,只能计算颜色 return 0 ; } return 1 ;}int sum_flip(){ //计算总的翻转次数 int i , j , sum = 0 ; for(i = 0 ; i < 4 ; i++) for(j = 0 ; j < 5 ; j++) sum += flip[i][j] ; return sum ;}int DP(){ int i , j , ans = 100 ; for(i = 0 ; i < (1<<5) ; i++){ //利用(00000)2 ----- (11111)2 二进制来枚举初始状态 memset(flip , 0 , sizeof(flip)) ; //记得初始 for(j = 0 ; j < 5 ; j++) flip[0][j] = (i&(1<<j)) ? 1 : 0 ; if(is_all_black()) ans = min(ans , sum_flip()) ; } return ans ;}int main(){ int T , i , j ; string s ; cin>>T ; while(T--){ for(i = 0 ; i < 4 ; i++){ cin>>s ; for(j = 0 ; j < 5 ; j++) color[i][j] = s[j] - '0' ; } cout<<DP()<<endl ; } return 0 ;}
0 0
- 题目1542:黑白迷阵 (状态DP)
- 九度OJ 9月赛第二场 题目1542:黑白迷阵 (状态压缩DP)
- 题目1542:黑白迷阵
- [各种面试题] 黑白迷阵
- 状态压缩DP 题目小节 (一)
- 状态压缩DP题目小节(二)
- 状态压缩DP题目小节(三)
- 经典状态dp题目
- 状态压缩dp题目
- 状态压缩DP 题目目录
- 状态压缩dp入门题目
- hdu 2167 状态压缩dp(入门题目)
- ZOJ 题目3777 Problem Arrangement(状态压缩DP)
- BZOJ题目1087: [SCOI2005]互不侵犯King(状态压缩DP)
- UVA 题目1099 - Sharing Chocolate(状态压缩DP+记忆化搜索)
- 2017.11.8机房小测-题目性质/区间计数(杂题)/DP状态巧定义
- iOS切换Statusbar黑白状态
- Survival (状态dp)
- This system is not registered with RHN
- trivial和non-trivial在构造析构中的作用
- const修饰符详解
- 有关const的一些知识点
- Linux下对临时文件的操作之mkstemp
- 题目1542:黑白迷阵 (状态DP)
- NSScanner 用法
- MFC学习记录
- [leetcode]Minimum Path Sum 最小路径和
- javaweb之Session校验图片认证码
- spring中的OpenSessionInViewFilter
- socket通信简介
- 画笔与画刷&GDI坐标系
- 检测到 ContextSwitchDeadlock 问题的解决办法!