1659: [Usaco2006 Mar]Lights Out 关灯
来源:互联网 发布:java哪些类不能被继承 编辑:程序博客网 时间:2024/05/08 22:00
题目链接
题目大意:给出一个初始01串和一个操作串,每次可以选一个位置l,让初始串从l开始与操作串异或,在最少化1的个数的同时最少化操作次数,输出字典序最大的操作方案
题解:迭代加深搜索,从小到大枚举最终亮着的灯数
剪枝就是迭代加深本身和记录操作数
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int M=55;int n,L;int num,ID;int stk[M],d[M];char S[M],T[M];int dfs(int x,int cnt,int light){ if(cnt>num||light>ID) return 0; int tmp=0; if(x>n-L+1) { for(int i=x;i<=n;i++) if(S[i]) light++; if(cnt>num||light>ID) return 0; for(int i=1;i<=cnt;i++) stk[i]=d[i]; num=cnt;return 1; } d[cnt+1]=x; for(int i=x;i<=x+L-1;i++) S[i]^=T[i-x+1]; tmp|=dfs(x+1,cnt+1,light+S[x]); d[cnt+1]=0; for(int i=x;i<=x+L-1;i++) S[i]^=T[i-x+1]; tmp|=dfs(x+1,cnt,light+S[x]); return tmp;}void work(){ for(num=n,ID=0;ID<=n;ID++) if(dfs(1,0,0)) break; printf("%d\n",num); for(int i=1;i<=num;i++) printf("%d\n",stk[i]);}void init(){ cin>>n>>L; scanf("%s%s",S+1,T+1); for(int i=1;i<=n;i++) S[i]-='0'; for(int i=1;i<=L;i++) T[i]-='0';}int main(){ init(); work(); return 0;}
阅读全文
0 0
- 1659: [Usaco2006 Mar]Lights Out 关灯
- 1659: [Usaco2006 Mar]Lights Out 关灯
- bzoj 1659: [Usaco2006 Mar]Lights Out 关灯(IDA*)
- 1659: [Usaco2006 Mar]Lights Out 关灯 迭代加深搜索
- [BZOJ1659][Usaco2006 Mar]Lights Out 关灯
- BZOJ 1659: [Usaco2006 Mar]Lights Out 关灯 迭代加深搜索
- POJ 1222 EXTENDED LIGHTS OUT 关灯游戏-高斯消元(列主元)
- 关灯游戏 Lights out (一)(极速求解)
- 关灯游戏 Lights out (三)(线性代数+高斯消元,搜索全部解)
- 关灯游戏 Lights out (四)(多种颜色,难度升级版)
- 关灯游戏 Lights out (二)(首行枚举+位运算,搜索全部解)
- Lights off(关灯游戏)终极算法
- 解决关灯游戏(Lights Off)
- C - Extended Lights Out
- A. Lights Out
- Lights Out Game
- poj EXTENDED LIGHTS OUT
- EXTENDED LIGHTS OUT
- 安卓使用intent切换到同级窗口和子窗口,并从子窗口中获取返回数据
- Linux下read和fgets的一些比较
- Linux系统中虚拟机的安装
- sizeof(数组名)与sizeof(指针变量)
- JavaScript作用域、作用域链、闭包详解
- 1659: [Usaco2006 Mar]Lights Out 关灯
- AB1601优化与生成代码大小
- C++ 类的静态成员、静态成员函数
- 总结并剖析malloc/free和new/delete之间关系和差异
- 1132. Cut Integer (20)
- 跨域请求CORS请求不能收到服务器返回的数据
- GAN改进方向
- Java8 I/O源码-PipedReader与PipedWriter
- 画图板定位的问题