DP
文章平均质量分 57
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[DP 上下界最小流] BZOJ4200 [Noi2015]小园丁与老司机
膜拜大神题解:http://blog.csdn.net/popoqqq/article/details/47402925http://www.cnblogs.com/maijing/p/4689740.html不管怎么说,参观了很多大神的代码,还是把老司机给A掉了第一二问 DP 但是细节很多 码出来的神犇很强 自己代码能力太差然后之后还得来个DP 与第一遍方向相反 就是原创 2016-03-16 21:14:25 · 1862 阅读 · 0 评论 -
[状压 DP] BZOJ 4416 [Shoi2013]阶乘字符串
传送门:http://blog.csdn.net/lych_cys/article/details/50822551令g[i][c]表示i之后第一个为c的字母的下标。 令i为用二进制表示的已经选取的字母的集合,令f[i]表示选取的字母的集合的全排列都出现的最短的原串的前缀的长度。然后枚举字母转移。显然当且仅当f[2^n-1]#include#include#原创 2016-03-17 08:11:45 · 629 阅读 · 0 评论 -
[DP] BZOJ2700 聚会
%%%Hillan:http://blog.csdn.net/liutian429073576/article/details/50910334我开始想的就是O(n) 贪心#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ st原创 2016-03-20 19:30:40 · 621 阅读 · 0 评论 -
[期望DP] BZOJ4008 [HNOI2015]亚瑟王
神犇题解:http://blog.csdn.net/popoqqq/article/details/45365759f[i][j]应为考虑到 i 还剩 j 个机会 这样一个局面的概率神DP#include #include #include #include using namespace std;int n,m;long double ans;long double原创 2016-03-15 09:37:16 · 645 阅读 · 0 评论 -
[DP 找规律] BZOJ2489 Random Sequence
很好的题解:http://acm.uestc.edu.cn/bbs/read.php?tid=3698&page=1&toread=1#tpc#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) {原创 2016-03-15 13:28:45 · 639 阅读 · 0 评论 -
[DP 组合数学] BZOJ 4498 魔法的碰撞
传送门:http://blog.csdn.net/visit_world/article/details/51090964dp其中一维解释一下,表示可以放且必须放的一个位置#include#include#include#include#define P 1000000007using namespace std;typedef long long ll;inlin原创 2016-04-12 19:57:31 · 768 阅读 · 0 评论 -
[组合 容斥 DP] BZOJ 2863 愤怒的元首
题解:http://blog.csdn.net/werkeytom_ftd/article/details/51182412我们设f[i]表示i个带编号结点组成的合法DAG的个数。 如果删去DAG中所有入度为0的结点,接下来的DAG也是一个合法DAG。 但我们不知道有多少入度为0的结点,所以我们想要得到至少有0个入度为0的结点的DAG个数(对就是这么神奇)。 那就容斥呗。原创 2016-04-20 16:18:17 · 654 阅读 · 0 评论 -
[贪心 DP] BZOJ 4069 [Apio2015]巴厘岛的雕塑
从高位到低位题目里面数据分两类一类是A>1,dp一下f[i][j]这段区间是否符合当前答案,n3log;第二类是A=1,dp一下g[i]表示在满足答案前提下以i为结尾切开来最少能且多少段,n2log。#include#include#includeusing namespace std;typedef long long ll;inline char nc(原创 2016-05-04 21:22:50 · 568 阅读 · 0 评论 -
[DP] BZOJ 1270 [BeijingWc2008]雷涛的小猫
水题#include#include#includeusing namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF原创 2016-05-29 21:34:48 · 329 阅读 · 0 评论 -
[拓扑序DP 记忆化搜索] BZOJ 4562 [Haoi2016]食物链
考生物啊 真是全面发展啊水题 记忆化搜索#include#include#include#define V G[p].vusing namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100原创 2016-05-29 21:39:01 · 408 阅读 · 0 评论 -
[概率 树形DP] BZOJ 3566 [SHOI2014]概率充电器
题解:http://www.cnblogs.com/ctlchild/p/5105390.html考虑补集转化。先dfs一遍,令f[u]=(1-p[u])*∏(1-(1-f[v])*w) f[u]表示u这个点通过其子树并不能联通的概率。然后考虑v从其父亲连过来的情况,设x=1-f[u]/(1-(1-f[v])*w)表示除掉v,u联通的概率,那么f[v]*=(1-x*w)然后加起原创 2016-04-22 10:16:38 · 445 阅读 · 0 评论 -
[概率DP] BZOJ 3036 绿豆蛙的归宿
好水的题#include#include#include#include#define V G[p].vusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(bu原创 2016-04-22 10:14:45 · 442 阅读 · 0 评论 -
[斜率优化 DP] BZOJ 4518 [Sdoi2016]征途
就是求平方和的最小值然后就是裸的斜率优化了#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,原创 2016-04-23 10:02:03 · 376 阅读 · 0 评论 -
[DP 矩阵快速幂] BZOJ 1875 [SDOI2009]HH去散步
一个DP用矩阵快速幂加速然后这个DP状态比较巧妙 以边作状态#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (原创 2016-05-08 12:47:59 · 456 阅读 · 0 评论 -
[DP Euler Zigzag Number] BZOJ 1925 [Sdoi2010]地精部落
Euler Zigzag Number什么的太神啦推导:http://blog.csdn.net/vmurder/article/details/44604275#include#include#includeusing namespace std;const int N=5005;int n,P;int f[2][N];int main(){原创 2016-06-06 06:51:06 · 931 阅读 · 0 评论 -
[仙人掌直径 单调队列 DP] BZOJ 1023 [SHOI2008]cactus仙人掌图
题解:http://z55250825.blog.163.com/blog/static/150230809201412793151890/http://hzwer.com/4645.html#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ s原创 2016-07-02 00:07:22 · 877 阅读 · 0 评论 -
[期望DP] BZOJ 1417 Pku3156 Interconnect
举个栗子E(2,3,3)=p1*E(2,3,3)+p2*E(2,6)+p3*E(3,5)+1#include#include#include#include#includeusing namespace std;typedef vector data; inline char nc(){ static char buf[100000],*p1=buf,*p原创 2016-06-27 11:53:27 · 542 阅读 · 0 评论 -
[DP] BZOJ 4244 邮戳拉力赛
DP方程有点难懂 晕#include#include#include#includeusing namespace std;typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100原创 2016-06-20 21:36:31 · 610 阅读 · 0 评论 -
[二进制构造 || DP] BZOJ 3107 [cqoi2013]二进制a+b
可以类似数位DP然后Po姐 的构造好劲啊 Orzhttp://blog.csdn.net/popoqqq/article/details/48006557#include#include#includeusing namespace std;inline int lowbit(int x){ return x&-x;}inline int digit(in原创 2016-05-20 16:36:48 · 417 阅读 · 0 评论 -
[树形DP 启发式合并 神题] BZOJ 4543 [POI2014]Hotel加强版 & BZOJ 3522 [Poi2014]Hotel
%%%神犇的题解转移不难想 关键是空间和时间空间用轻重链的思想和指针转移 时间么 指针转移&启发式合并复杂度的证明比较巧妙“任意设一点作为根。令 f(a, d) 表示在以 a 点为根的子树中,与 a 距离为 d 的节点数;g(a, d) 表示在以a 为根的子树中选择两个节点,满足剩下的一个节点 s 需在 a 子树外选择且与 a 的距离必须为 d 的方案数。则方案原创 2016-05-18 21:31:46 · 2093 阅读 · 1 评论 -
[Tarjan缩点 拓扑序DP] SRM 499 1000pts
题目大意题解:#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,原创 2016-07-16 18:02:04 · 406 阅读 · 0 评论 -
[DP] BZOJ 4247 挂饰
一个01背包#include#include#include#include#includeusing namespace std;typedef pair abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,10原创 2016-06-20 21:35:26 · 307 阅读 · 0 评论 -
[找规律 递归子问题 || 数位DP] BZOJ 4513 [Sdoi2016]储能表
看不懂数位DP,蒟蒻就是蒟蒻:http://fancypei.github.io/2016/04/16/SDOI2016%20Round1/然后ZZY Google到了一个神奇的做法,很happy:https://blog.menci.moe/sdoi2016-table/强力膜拜考虑异或的性质:性质一:对于任意 x性质二:对于任意 x≠yx≠y,必原创 2016-04-23 09:51:49 · 1339 阅读 · 0 评论 -
[数位DP] BZOJ 4521 [Cqoi2016]手机号码
题解:http://www.cnblogs.com/ccz181078/p/5379967.html数位DP和喜闻乐见的前缀和#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p原创 2016-04-18 18:49:31 · 506 阅读 · 0 评论 -
[DP] BZOJ 2958 序列染色
题解:http://blog.csdn.net/lych_cys/article/details/51078401令f[i][j][k]表示到第i位,状态为j,第i位为k的方案数。其中状态0表示之前没有k个B和k个W;1表示只有k个B;2表示之前有k个B和k个W。转移的时候只需要得到这一位填某一个字母的情况下会不会产生新的k个连续串,然后该加的地方加上,改去掉重复方案的去掉即可。#in原创 2016-04-13 17:25:48 · 760 阅读 · 0 评论 -
[DP LIS] BZOJ 4282 慎二的随机数列
显然随机的数全部属于上升序列肯定能构造出最优解,那么直接认为随机的数都在最优解中。 如果是求最长不上升子序列的话就直接去掉所有的随机数求一遍然后加上随机数的个数。 现在是让求最长上升子序列,只需把每个数都减去前面随机的数的个数然后求一遍再加上随机数的个数即为答案!#include#include#includeusing namespace std;inline char n原创 2016-04-07 19:35:05 · 603 阅读 · 0 评论 -
[状压DP] Codeforces Beta Round #72 Div1 E Two Subsequences
题目大意:题解:首先定义w[a][b]表示a串后面拼b串会增加多少个字符。 最朴素的状态表示dp[n][k]表示前n个字符串,不包含第n个字符串的子序列末端是第k个字符串的最小总长。转移是dp[n][k]=dp[n−1][k]+w[s[n−1]][s[n]],其中k!=n−1dp[n][n−1]=min{dp[n−1][k]+w[s[k]][s[n]]}然而这个原创 2016-07-04 19:29:36 · 386 阅读 · 0 评论 -
[DP 乱搞] 51Nod 1321 收集点心
#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p原创 2016-07-04 19:21:18 · 396 阅读 · 0 评论 -
[矩阵快速幂 优化DP] 51Nod 1311 转换机
#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) re原创 2016-07-04 19:18:27 · 564 阅读 · 0 评论 -
[KM 树同构Hash DP] BZOJ 3197 [Sdoi2013]assassin
丢下题解跑:http://blog.csdn.net/PoPoQQQ/article/details/43206463#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef unsigned long long ull; inline c原创 2016-07-04 19:03:23 · 577 阅读 · 0 评论 -
[仙人掌DP] BZOJ 4316 小C的独立集
很裸的仙人掌DP算模板题吧#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;原创 2016-07-03 12:50:40 · 442 阅读 · 0 评论 -
[环套树 单调队列DP] BZOJ 1791 [Ioi2008]Island 岛屿
先找环 用环上每个点的子树的直径更新答案然后跨环 把环展开倍增 做一遍单调队列DP max{f[i]+sum[i]+f[j]-sum[j]}似乎可以直接套仙人掌模板啊注意 long long 会爆栈 懒得手写栈 先让它RE好了#include#include#includeusing namespace std;typedef long long ll;in原创 2016-07-02 00:04:49 · 911 阅读 · 0 评论 -
[DP 树 神奇优化] BZOJ 3057 圣主的考验
N3很好想 然而T飞 强行搬运:裸的树形DP很简单,F[i,j]表示i个节点,高度为j的方案数。枚举左子树有多少个节点转移即可。但是这样是O(N^3)的,会超时。注意到满足题目所述要求的树高度的范围很小。不妨把具有i个节点的满足题目要求的树的高度范围记为L[i]~R[i]。那么我们先考虑如下两个问题:高度为h的树最多有多少个节点。显然就是这个高度的满二叉原创 2016-06-27 11:58:17 · 1049 阅读 · 0 评论 -
[树形DP] IOI 2012 Ideal city
#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p原创 2016-07-07 22:06:36 · 415 阅读 · 0 评论 -
[AC自动机 DP] BZOJ 1030 [JSOI2007] 文本生成器
AC自动机上DP算模板题吧#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) {原创 2016-07-21 08:39:09 · 272 阅读 · 0 评论 -
[AC自动机 概率DP 矩阵乘法||高斯消元] BZOJ 1444 [Jsoi2009]有趣的游戏
AC自动机建转移矩阵 然后要么矩阵乘法 无限迭代 数据范围小可以接受#include#include#include#includeusing namespace std;typedef long double ld;//typedef double ld;inline char nc(){ static char buf[100000],*p1=buf,*原创 2016-07-21 08:44:58 · 766 阅读 · 0 评论 -
[KMP DP 矩阵快速幂加速] BZOJ 1009 [HNOI2008]GT考试
%%%jiry_2把 KMP 的 DFA 建出来,相当于求长度为n 的不经过 m 号点的路径条数。矩阵乘法。时间复杂度 O(n3logn)#include#include#includeusing namespace std;const int N=25;int n,m,P;struct Matrix{ int n,a[N][N]; Matrix(原创 2016-08-05 14:53:51 · 439 阅读 · 0 评论 -
[线段树优化 DP] BZOJ 3242 [Noi2013]快餐店
一开始以为是环套树的直径 后来发现不对其实做法差不多 暴力断开一条边 然后找树直径这可以在环上建线段树优化#include #include #include using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf原创 2016-08-28 08:04:09 · 731 阅读 · 1 评论 -
[DP 容斥原理] BZOJ3622 已经没有什么好害怕的了 && BZOJ 2024 [SHOI2009] 舞会
传送门:http://www.cnblogs.com/dyllalala/p/3900077.html比较好的DP题#include#include#include#define P 1000000009using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1原创 2016-03-15 20:10:59 · 619 阅读 · 0 评论 -
[DP 可并堆维护凸包优化] BZOJ 4585 [Apio2016]烟火表演
垂死梦中惊坐起,膜拜神犇王梦迪#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread原创 2016-08-28 18:42:59 · 1925 阅读 · 0 评论