[对抗搜索][剪枝][建模转化][模板] POJ 1085

minimax搜索+α-β剪枝优化模板题。

第一个需要处理的就是把状态全部转化成二进制形式,包括三角形,边,棋盘,等等。转化好了之后就可以用minimax搜索了。在一开始的时候边读入边改变局面和cnta,cntb这两个分别代表a和b的得分,这个题有需要注意的一点就是如果一方得分了那么他是可以继续下一轮的,所以每次都要判断走向下一个局面的时候是不是得分。注意α是max层的最大值的最小边界,β是min层的最小值的最大边界,这里对一方操作之后发现不再满足α<=β,其实是跟父节点的另一方作对比的,一旦不满足即说明当前节点不再有利用价值,直接把这个越界的值返回父节点即可(因为父节点还是要更新状态的)这里并没有要求算出具体得分,所以用-1和1 来表示输赢即可,在每一层里加上cnt与5的关系判别也可以做到剪枝的作用。

继续阅读“[对抗搜索][剪枝][建模转化][模板] POJ 1085”

[搜索][meet in the middle] CF1006F Xor-Paths

https://cn.vjudge.net/problem/CodeForces-1006F

题意要求从矩形左上角走到右下角的路,满足只能向右/向下走,然后路上的数值以后之后的值等于k。

简单的想的话,所有可能的情况大概是C(20,40),无疑超时,然后记录下到每个点的所有xor值的数量的话就可以meet in the middle了,另一个搜索从右下角开始,两个都只需要搜一半长度,对于这种指数复杂度的来说就相当于开了根号,复杂度暴降,值得拥有。
注意的点,第一是map的使用,感觉自己这些还是有点不灵活。。。第二是LL,已经不知道因为这个错过多少次了。。包括参数表里的long long和int也是注意的点 继续阅读“[搜索][meet in the middle] CF1006F Xor-Paths”