摘要: 题目大意:给你一些操作(操作和串的长度一样,操作的每一位对应串的每一位),一些串和它的目标串,求出把它变换成目标串的最小操作次数。串的长度len<=20,操作方式m<=50,n<=4考虑到直接枚举所有操作并且每次对每一位进行操作会很慢,又都是01串,很容易想到位运算。把每一个串都看成一个二进制数,修改为1等价于or 1,修改为0为and 0,取反为xor 1。所以建立三个数组,c0,c1,cqf表示三种运算,一个操作则对应三个二进制数。这样状态就可以O(1)的转移。program Neayo;const inf='quantum.in'; ouf='q 阅读全文
posted @ 2012-10-12 15:26 neayo 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 题目大意:若两个格子有公共顶点,那么他们就是相邻的格子。(所以与(i,j)相邻的格子有(i−1, j−1),(i−1,j),(i−1,j+1),(i,j−1),(i,j+1),(i+1,j−1),(i+1,j),(i+1,j+1))。我们定义一个格子的集合S为山峰(山谷)当且仅当:1.S的所有格子都有相同的高度。2.S的所有格子都联通3.对于s属于S,与s相邻的s’不属于S。都有ws>ws’(山峰),或者ws<ws’(山谷)给定一个图,求所有的山峰和山谷。注意,有的格子可能既不是山峰也不是山谷,当所有格子都等高的时候,它既是山峰也是山谷。直接裸搜,枚举一个未被访问的结点搜索所有它能 阅读全文
posted @ 2012-10-12 14:33 neayo 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 经典问题题目大意:对于一个n*n的矩阵,每条横线竖线斜线上都只能放一个皇后,求方案。用搜索即可,但是如果一个格子一个格子地枚举肯定会超时,所以考虑枚举每一行放的情况,但是要注意判断斜线上合不合法的情况,下面就是一种很好的方法。可知对于一个矩阵有如下特性,每条红色线上i-j的值相同,每条蓝线上i+j的值相同,并且它们的i+j或i-j的值都是不重复的。那么设置一个数组f1记录蓝色斜线,数组f2记录红色斜线,放第i行第j个的时候直接判断f1[i+j]和f2[i-j]有没有放。program Neayo;const inf='queen.in'; ouf='queen.ou.. 阅读全文
posted @ 2012-10-12 11:14 neayo 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 1 program Neayo; 2 const 3 inf='queen.in'; 4 ouf='queen.out'; 5 var 6 i,j,k,n:longint; 7 line,h:array[0..11]of longint; 8 f1,f2:array[-10..25]of boolean; 9 a:array[0..11,0..11]of longint;10 procedure init;11 begin12 assign(input,inf);assign(outpu... 阅读全文
posted @ 2012-10-12 11:11 neayo 阅读(87) 评论(0) 推荐(0) 编辑