04 2016 档案

摘要:裸的最小割,很经典的模型。 建图:要求总收益-总成本最大,那么将每条弧与源点相连,流量为成本,每个收益与汇点相连,流量为收益,然后每条弧与它所能到达的收益相连,流量为inf。 与源点相连的是未被选中的弧(未花费的成本),与汇点相连的是选中的收益,那么,初始状态是完美的,显然不可能,因为获得收益必然要 阅读全文
posted @ 2016-04-24 17:32 DMoon 阅读(853) 评论(1) 推荐(0)
摘要:裸题,注意:基本的判断(求Min还是Max),因为是顺着做的,且最后一个a[i]一定要取到,所以是f[n]。 DP:f[i]=min(f[j]+(i-j-1)*(i-j)/2+a[i]) 依旧设x>y且f[x]优于f[y](原来是通用方法。。。) 2*(f[x]-f[y]) +x^2+x-y^2-y 阅读全文
posted @ 2016-04-23 19:56 DMoon 阅读(496) 评论(0) 推荐(0)
摘要:想了好久啊.。。。——黑字为第一次更新。——这里是第二次更新,维护上下凸包据题而论,第一种方法是化式子的方法,需要好的化式子的方法,第二种是偏向几何,十分好想,纯正的维护凸包的方法,推荐。 用了我感觉比较好写的一种(因为没写过维护凸包),另一种是维护(上)凸包的做法,本质一样?推荐http://ww 阅读全文
posted @ 2016-04-23 16:39 DMoon 阅读(375) 评论(0) 推荐(0)
摘要:第一次斜率优化。 大致有两种思路: 1.f[i]表示第i个不选的最优情况(最小损失和)f[i]=f[j]+e[i] 显然n^2会T,但是可以发现f的移动情况可以用之前单调队列优化,就优化成O(n)的了。 2.f[i]表示第i个选,第j+1不选的最优情况(最大效率和)f[i]=f[j]+sum[i]- 阅读全文
posted @ 2016-04-23 08:23 DMoon 阅读(535) 评论(0) 推荐(0)
摘要:第一次写单调队列太垃圾。。。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #define N 50010 6 using namespace std; 7 struct 阅读全文
posted @ 2016-04-22 20:23 DMoon 阅读(466) 评论(0) 推荐(0)
摘要:三分套三分,挺神奇的。。。每次找到,每个传送带的上下两个三等分点,下面那个小,则一定有更优的在中间。 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #define eps 1e-3 5 using namespace s 阅读全文
posted @ 2016-04-04 21:04 DMoon 阅读(324) 评论(0) 推荐(0)
摘要:1230 线段树 1231 状压DP 1232 最小生成树 1527 贪心 1600 打表找规律 1601 最小生成树 1602 prime 1606 DP 1607 筛法 1609 DP 1610 几何 1613 DP 1614 二分+spfa判断,使最短路比二分的数大的边权小于k,二分10000 阅读全文
posted @ 2016-04-04 16:44 DMoon 阅读(400) 评论(2) 推荐(0)
摘要:SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了。。。 最小道路=已选取的奶牛/道路总数。 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 int 阅读全文
posted @ 2016-04-04 01:35 DMoon 阅读(378) 评论(0) 推荐(0)
摘要:其实题不难,不知提交了几次。。。不能代码MD。。。注意一些基本问题。。。SB概率题 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #define N 1001 5 using namespace std; 6 dou 阅读全文
posted @ 2016-04-03 18:36 DMoon 阅读(449) 评论(0) 推荐(0)
摘要:最水的概率期望,推荐算法合集之《浅析竞赛中一类数学期望问题的解决方法》 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 #define N 100010 5 #define M 200020 6 struct E 阅读全文
posted @ 2016-04-03 15:38 DMoon 阅读(394) 评论(0) 推荐(0)
摘要:首先求出各点之间的最短路,floyed即可,注意是0~n。 然后考虑状压,f[i][j]表示状态为i时访问j点时的最短路和,1表示访问,0表示未访问,然后第j个点所在的位置就是(1<<j)有0存在,例如状态1010,从右至左,点1.3被访问,所以我们要处理第1各点就是(1<<1)。 f[i][j]= 阅读全文
posted @ 2016-04-03 10:40 DMoon 阅读(250) 评论(0) 推荐(0)
摘要:经典状压DP. f[i][j][k]=sum(f[i-1][j-cnt[k]][k]); cnt[i]放置情况为i时的国王数量 前I行放置情况为k时国王数量为J 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 #d 阅读全文
posted @ 2016-04-03 09:13 DMoon 阅读(167) 评论(0) 推荐(0)