
状压
ymzqwq
这个作者很懒,什么都没留下…
展开
-
[POJ 2411] Mondriaan's Dream (轮廓线DP)
传送门 轮廓线DP基础题。 不得不说轮廓线DP的思想真的很精妙,但是轮廓线状态的表示方法我也是看了好久才理解。 轮廓线的状态不是按照一般状压DP不太一样,个人觉得这篇博客讲得比较简短清楚,这篇博客虽然具体但是不太清晰,再结合一下代码应该就能理解了。 话说我之前学的时候明明看到一篇很好的博客啊,现在怎么死活找不着了。。 #include<cstdio> #include<...原创 2018-07-28 10:25:21 · 228 阅读 · 0 评论 -
TopCoder SRM 569 Div1 500 TheJediTest (首次Div1 500!!)
啦啦首次做出Div500 虽然只有250+QAQ 因为还是卡了一会 看到数据范围这么小,首先想到了状压 首先显然我们要让每一层的人都尽量是KKK的倍数 我们自下往上逐层考虑 为了接近KKK的倍数,要么由每一层多出来的人往上走,要么就是上面一层的人补下来 把这两种情况状压一下,1表示往上走,0表示走下来 有一个需要注意的地方就是一个人只能走一层,所以移动人数还要和原来人数取min #i...原创 2018-08-13 21:32:13 · 333 阅读 · 0 评论 -
TopCoder SRM 579 Div1 450 TravellingPurchasingMan
其实是个很水的状压DP,我还WA了三发。。 用f[i][j]f[i][j]f[i][j]表示访问过的商店状态为iii,当前刚从jjj出来,所需的最小时间。 然而有一些细节。。 #include <bits/stdc++.h> using namespace std; const int M=16; const int N=51; int f[1<<M][M],m; int ...原创 2018-09-18 14:55:19 · 272 阅读 · 0 评论 -
TopCoder SRM 577 Div1 500 EllysChessboard
考虑将整个过程倒过来考虑,那么每次就是消除距离最远的点对中的一个点。 我们就爆搜消除哪个点,把点状压起来,用map加个记忆化。 很诡异的是,我一开始只对所有’#‘状压,结果极限数据根本跑不过去,后来改成对所有点状压就突然跑得飞快,什么鬼啊,点多了不应该更慢了??而且这两种方法在所有点都是’#'的情况下应该是一模一样的啊。。。 #include &lt;bits/stdc++.h&gt; #defi...原创 2018-09-27 09:14:09 · 821 阅读 · 0 评论 -
TopCoder SRM 713 Div1 500 DFSCount
#include &amp;lt;bits/stdc++.h&amp;gt; #define ll long long #define fr(i,x,y) for(int i=x;i&amp;lt;=y;i++) #define rf(i,x,y) for(int i=x;i&amp;gt;=y;i–) #define frl(i,x,y) for(int i=x;i&amp;lt;y;i++) using names原创 2018-11-01 15:38:09 · 513 阅读 · 0 评论