插头DP
broxin
这个作者很懒,什么都没留下…
展开
-
ural1519Formula 1 (插头DP)
题意:n*m的地图,'*'代表不能走,'.'代表可以走。求哈密顿回路的数量。n,m claris讲了插头DP,感觉都差不多听懂了,但是实现还是有一定困难,花了3个小时才写出来我的第一篇插头DP的程序。感觉就是维护一个轮廓线,每一格压位表示,然后DP过程中每一次对这个轮廓线的维护都是O(1)的。 这是用括号表示的,0表示空,1表示左括号,2表示右括号。注意分类讨论就行了。实现的时候还是要ha原创 2016-02-16 23:24:14 · 576 阅读 · 0 评论 -
BZOJ3125city (插头DP)
题意:就是上一道formula的基础上限定某些格子只能竖着通过,某些只能横着通过。 还是括号表示。这个转移的时候特判一下就好了,具体实现基本和上一题一样。 #include #include #include #include #include using namespace std; #define LL long long #define clr(a) memset(a,0,sizeof原创 2016-02-16 23:26:28 · 857 阅读 · 0 评论 -
ants(插头DP)
有一个N*N的矩阵,需要用若干循环将其铺满,使得每个格子都处于一个循环上,求方案数,逆时针和顺时针的循环算作不同的方案。n 插头DP,用0表示空,1表示插向轮廓线下侧的插头,2表示插向轮廓线上侧的插头。一共有9种转移,分类讨论即可。实现的过程中可以用4进制来代替3进制。 由于我直接用的city那道题的插头DP模板,结果N=8以上就卡了很久。注意换行的时候不能直接移位,因为会产生不合法的状态,要原创 2016-02-24 17:18:56 · 424 阅读 · 0 评论 -
BZOJ2310 parkii (插头DP)
题意:给一个矩阵,让找一条简单路径使路径和最小。N 如果矩阵全是正数的话枚举起点终点跑跑费用流就好了,省选的话一定会给这个部分分。 考虑用括号序列的插头DP,增加一个3号表示起点和终点那种插头。注意这个1表示左括号,2表示右括号,3表示其它这个是有讲究的,可以用xor来很方便地转化。 分类讨论比较繁琐,参考了一下claris的才完整地写出来。但是有些细节的处理上要注意和回路的区别。还有就是要原创 2016-02-25 00:34:51 · 878 阅读 · 0 评论