dp
1
__meteor
对于未来, 我只是一个孩子;
展开
-
HDU 4418 (期望dp 高斯消元)
题意:有一个坐标轴,从s点开始,为了到达e点,走的时候是周而复始循环的,比如 0 1 2 3 3 2 0.。。,从一个点开始,每走k步都有pk的概率停下,问正好停在目标点的期望是多少;思路:设dp[i]是在i点到e点的期望,dp[i]=p1*dp[i+1]+p2*dp[i+2]....+pk*dp[i+k](因为期望都是倒着推)gauss 求解就可以了因为有不能到的点,如果不能到的点...原创 2018-08-25 10:57:58 · 259 阅读 · 0 评论 -
HDU5456 记忆化搜索
传送门题意:给你n个火柴,能拼成几个A-B=C的等式思路:可以转换位B+C=A,这个题不允许有前导零,0这个数也是不行的,我们 从个位开始同时对B,C进行搜索,看是否满足状态表示是dp[n][B][C][carry]:表示还剩余n个火柴,B是否继续,C是否继续,这一位有没有进位。#include<bits/stdc++.h>using namespace std;...原创 2018-08-31 11:07:55 · 132 阅读 · 0 评论 -
BZOJ3566 概率充电器 树形概率dp
传送门题意:给你一棵树,求能充电节点的期望个数,每条边都有一个概率,每个点也有一个概率。思路:从反面考虑:设s[u]是u没电,以及它的孩子也不会给他充电。 (pt是边的概率)f[u]是父亲不给供电从父亲的电有两个来源,一个是自己兄弟,另一个是父亲的父亲。我们先在上面求出h[v]=1-pt+pt*s[v]所以期望就是E=E+1-s[i]*f[i];#in...原创 2018-08-27 15:16:39 · 199 阅读 · 0 评论 -
偏序关系与dp BZOJ3594(二维树状数组)
传送门偏序关系二维树状数组这个题用dp[i][j]表示前i个数,以h[i]结尾,用了j次修改,最长的非递减序列。但是这样直接dp的话如下for(int i=1; i<=n; i++){ for(int j=0; j<=K; j++){ for(int a=0; a<i; a++){ fo...原创 2018-08-22 20:17:43 · 385 阅读 · 0 评论 -
BZOJ 3209 数位dp(求单个phi值模板)
传送门题意是求,n是1e15,枚举1的个数,数位dp#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;typedef long long ll;const int N=1e5+10;const ...原创 2018-08-26 20:50:04 · 141 阅读 · 0 评论 -
牛课 字符路径 类似树形dp
传送门#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned int ui;const ll INF=0x3f3f3f3f3f3f3f3f;const int N=2e5+10;int n, m;struct node{ int v; char ...原创 2018-08-18 13:57:34 · 84 阅读 · 0 评论 -
在仙人掌图上dp的处理 BZOJ1023+BZOJ1487
仙人掌图就是图中包含圈,但是圈不能共边。举个例子, 如下图1、2、3: 假如将这些圈的都缩成点,显然就是一棵树了,对于一棵树进行dp,那就很简单了。因此,处理这类问题需要分两步。1.当dp的边是桥,也就是不是环上的边,那我们就正常的从他的孩子中取最优解转移到该节点。2.当dp的边是在环上。我们需写一个函数对该环单...原创 2018-08-07 16:25:30 · 422 阅读 · 0 评论 -
HDU 6365 Shoot Game区间dp+离散化
传送门这个题跟UVALive - 6938,的思路是一样的,感觉没做过那个题,这个题真的不好想。具体思路可以看-》这个题然后这个题就是将区间转化成了极角的区间,然后对极角区间离散化,同一个角度里的物体,取花费最高的那一个。还有就是这个题x,y, w值都比原来的题大,所以dp用long long ,极角排序的时候也要转化成long long #include<bits/std...原创 2018-08-11 10:34:21 · 149 阅读 · 0 评论 -
UVALive - 6938 区间dp+离散化
传送门思路:一条射线最小的花费就是路径上最高的那个,对于时间这个区间,我们可以将其离散化成1~600的范围,因为有三百个点,最多就600个不同的数,转移方程就是, dp[i][j]是(i,j)开区间的最小花费,id就是(i,j)时间区间中最高的外星人,k就是枚举这个外星人区间的某个时间点,将(i,j)划分为更小的区间(i,k)(k,j)。#include<bits/stdc++...原创 2018-08-11 10:25:31 · 127 阅读 · 0 评论 -
南京网络赛E题(状压)
传送门dp[i]代表i二进制代表的的题目全做完的最大值。dp[i]=max(dp[i], dp[pre]+a[i]*num[i]+b[i]) pre是去掉一题的前一个状态。重要的是初始化,对于不可能转移到的状态要置为-INF#include<bits/stdc++.h>using namespace std;const int N=1e6+1e5;typed...原创 2018-09-01 18:24:13 · 122 阅读 · 0 评论 -
CodeForces - 474E dp+离散+线段树优化
这个题跟这个题类似,都是一维dp,n^2复杂度,但是需要优化,感觉这种题数据小点1e4的话优化成nsqrt(n)就可以,1e5的话,要优化成nlog(n),这个题是用线段树维护的最大值。因为一个数只能由前面1~val[i]-d,或者val[i]+d~INF转移过来,所以我只要查询值在这个范围之内dp值得最大值就好,因为值是在1e15得范围,所以需要离散化。因为要输出路径,所以用...原创 2018-09-07 19:29:04 · 172 阅读 · 0 评论 -
ZOJ-3543不错的dp
title: ZOJ-3543不错的dpdate: 2018-11-01 16:40:58tags:dpcategoties: “算法”题意:给长为n-1字符串,包括‘I’,‘D’,’?'三个字符,含义分别是:‘I’比前面的数大‘D’比前面的数小‘?’不受限制问题是有多少1~n的全排列满足这个关系串。思路:感觉挺难想的。设dp[i][j]代表1~i的全排列,以j...原创 2018-11-01 17:02:40 · 150 阅读 · 0 评论 -
poj1695 dp思维 不错
题意:给三辆车,将1~n这n个点依次跑完,也就是说要想到达i+1,必须先到达i,每两个点之间都有花费,问最小的话费是什么。思路:设dp[i][j][k],为走的最远的车,次元的车,最近的车在位置i,j,k的时候的最小花费。具体转移看代码,感觉非常巧妙。#include<cstdio>#include<cstring>#include<algori...原创 2018-10-26 15:58:30 · 156 阅读 · 0 评论 -
CF 570E dp递推
题意:给一个n*m的小写字母地图,找从(1,1)到(n,m)点非升路径,且路径组成的字符串是回文串的路径个数。思路:考虑从两端同时走,然后在中间相遇,走的步数是确定的,为n+m-1,所以只要两边同时走(n+m)/2步就行;考虑dp递推,只要条件限制好,是可以递推的设dp[step][x1][y1][x2][y2]为走step步到达p1,p2两点匹配的路径个数。转移方程就是...原创 2018-10-07 21:33:48 · 176 阅读 · 0 评论 -
uva-10828 期望dp+gauss
传送门题意:给你一个有向图,从1号节点出发,问经过某个点的期望次数。思路:传递闭包写错wa到哭。设 dp[i]为经过i点期望dp[v]=dp[u1]*p1+dp[u2]*p2+....(对于第一个点应该再+1)将每个dp看做变量,就可以构成n*n的矩阵比如样例1构成矩阵如下-1 1 0 -10.5 -1 0 0 0 0.5 -1 0...原创 2018-10-06 22:07:21 · 128 阅读 · 0 评论 -
HDU 5955 gauss概率dp+ac自动机
题意:有n个人,每个人猜一个[1,6]长度为L的序列,然后无限制的掷骰子,先掷到的那个序列,那个人就是winner,问每个人赢得概率。思路:骰子是掷无限次的,但是有许多状态是重复的,每一种掷法最终必定是以某一个人的序列结束的,也就是说,谁都不赢的序列是无穷的,概率趋近于0,所以每个人概率相加是1.我们可以用ac自动机节点编号当做某种情况的状态,nxt数组就是这个状态转向的下个状态。...原创 2018-10-11 11:58:01 · 273 阅读 · 0 评论 -
HDU6212 区间dp 好题
传送门思路:要是对原串区间dp感觉无从下手,需要重要的一步就是转化,转化成连续的01数量串,比如10010=1211这样的话每隔一个就是同一类的。对于单个数字,需要的就是3-a[i],对于一个区间,可以由三类转移1. 把区间分成 两份 例如 11 00 ans=22.中间消去两头相遇消去 例如11 00 1 ans=13.三块相遇消去 例如 1 00 1 ...原创 2018-09-13 15:34:46 · 133 阅读 · 0 评论 -
HDU 5009(dp + 双向链表的巧妙运用)
http://acm.hdu.edu.cn/showproblem.php?pid=5009这个题转移好想,时间优化不好想, 看了别人的思路,用双向链表优化,自己想到去链表里查找已经出现的元素也会花很多时间,一直没想出来,看了代码才知道,可以用map存一下前一个的位置,当有重复出现的时候, 只要将那个元素的删掉即可,也就是把他的前驱和后继相连,也就是为什么用双向链表了。因为如果一个一个涂也...原创 2018-09-07 15:25:39 · 182 阅读 · 0 评论 -
落谷3773 数论+dp递推
https://www.luogu.org/problemnew/show/P3773这个题就用到了上篇博客https://blog.csdn.net/du_lun/article/details/82414086,遍历子集的小技巧,题意是找有多少个长度>=2的下降子序列,满足mod2的lucas,并且值大于0由lucas可以知道C(x,y)=C(a1,b1)*C(a2,b2)…...原创 2018-09-05 15:30:21 · 188 阅读 · 0 评论 -
Gym - 101201H
题意:有k个区间,用他们填满1~n,不允许重叠,问留下的空隙最少是多少思路:可以从两方面考虑,第一个是正面考虑,转移方程dp[i]=min(dp[j]+l[i]-r[j]+1) (r[j]<l[i])这样的话将方程移项 dp[i]-l[i]-1=min(dp[j]-r[j]),所以用树状数组维护dp[j]-r[j]的最小值就可以了为了计算方便,添加一个终点区间(n+1,n+1...原创 2018-09-08 11:02:01 · 165 阅读 · 0 评论 -
计蒜客 宝藏 状压dp (遍历二进制中一的子集的小技巧)
传送门思路是参照着这个博客写的https://blog.csdn.net/a1035719430/article/details/80488083dp的一个状态是点集,这个是很好想的,但是加上路径上宝藏的数量就不好想了,因为所有路径都挖完是一颗树,我们可以用一维表示状态中最大的深度,即dp[i][s]表示深度为i,包含s集合点的时候最小值转移就是dp[i][t]=min(dp[i][t...原创 2018-09-05 09:14:09 · 278 阅读 · 3 评论 -
斜率优化DP(HYSBZ - 1010 +HDU 3507)
思路:这类问题有一个特点,n特别大 1e4以上,而且转移方程必须O(n^2)才能跑完。通过化简式子可以找到优化的途径。例如HYSBZ-1010我们可以写出转移方程假设k<j<i,且 j比k更优, 这时候会得到表达式设,这时候会化简成也就是最终转化成左边只有sum[i]的式子,这就相当于j,k两点的斜率,我们用单调队列维护一个斜率递增的j, k对于to...原创 2018-08-01 11:58:42 · 174 阅读 · 0 评论 -
牛课第七场 E Counting 4-Cliques(构造)
传送门思路:对于n个点的完全图,有C(n,4)个,我们需要先枚举第一个小于k的完全图(但是需要和70取最小值,否则剩下的点可能构造剩下的数不够),然后还剩下k-C(n,4)个,我们每添加一个点,向完全图连接n2条边, 会增加C(n2,3)个,我们可以用背包dp这个值,使得使用的点最少。#include<bits/stdc++.h>using namespace std;c...原创 2018-08-09 21:23:47 · 154 阅读 · 0 评论 -
2018牛课暑假多校第二场E-tree(链dp)
传送门这个题自我感觉DP超级难想,并且第一次遇到这样使用DP的题。大体思路就是先对于每个节点的子树进行dp, 值就是与i节点连通的大小为j 的所有乘积和,j的取值1,2、、、9,10 。分三种操作第一种修改i节点,就需要修改从i节点开始10以内的祖先, 具体做法就是先断开, 再修改, 再连接第二种修改父亲, 先断开,连接该节点断开的祖先,断开将要连接的节点的祖先,连接祖先即该...原创 2018-07-28 11:18:41 · 166 阅读 · 0 评论 -
ZOJ Seven Segment Display(数位DP)
Seven Segment DisplayTime Limit: 2 Seconds Memory Limit: 65536 KBA seven segment display, or seven segment indicator, is a form of electronic display device for displaying decimal numerals that i...原创 2018-04-01 22:29:27 · 149 阅读 · 0 评论 -
蓝桥 矩阵乘法(区间dp)
算法提高 矩阵乘法 时间限制:3.0s 内存限制:256.0MB 问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。 两个大小分别为p*q和q*r的矩阵相乘时的运算次数计为p*q*r。输入格式 输入的第一行包含一个整数n,表示矩阵的个数。 第二行包含n+1个数...原创 2018-04-01 15:28:21 · 220 阅读 · 0 评论 -
方格取数(状压DP)
#include<cstdio>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;const int INF=0x3f3f3f3f;const int maxn=25;int n, num[maxn][maxn], sum[maxn][maxn...原创 2018-04-01 20:42:57 · 515 阅读 · 0 评论 -
ZOJ 4019 Schrödinger's Knapsack (dp)
传送门思路: dp题还是做的太少, 不够灵活,这道题自己第一反应是背包,但容量太大,不可行。按题意分析,每一类里各自的价值是相同,所以当在一类中挑选的时候,当然是体积小的优先。所以对于两类来说也是大趋势是体积小的优先, 所以我们可以从小到大枚举A,B类的任意两个区间, 只要这两个区间的体积和小于总容量就行。但是A,B类的物品顺序还有影响,我们用dp[i][j]代表枚举A类的1~i区间,B类的1~j...原创 2018-04-08 14:01:57 · 510 阅读 · 0 评论 -
蓝桥 垒骰子(dp+矩阵快速幂)
垒骰子赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅...原创 2018-03-24 11:07:26 · 183 阅读 · 0 评论 -
蓝桥石子合并(区间DP四边形不等式)
算法提高 合并石子 时间限制:2.0s 内存限制:256.0MB 问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。输入格式 输入第一行包含一个整数n,表示石子的堆数。 接下来一行,包含n个整数,按顺序给出每堆石子的大小 。输出格式 输出一个整数,表示合并的...原创 2018-03-20 11:30:49 · 271 阅读 · 0 评论 -
HDU2571(记忆化搜索)
命运Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21252 Accepted Submission(s): 7400Problem Description穿过幽谷意味着离大魔王lemon已经无限接近了!可谁能想到,yifenfei...原创 2018-03-13 15:51:29 · 151 阅读 · 0 评论 -
poj3744(概率dp+矩阵快速幂)
Scout YYF ITime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 10134 Accepted: 2958DescriptionYYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into the enemy's ba...原创 2018-03-12 17:54:37 · 216 阅读 · 0 评论 -
POJ3280(区间dp求使之成为回文串花费最少)
Cheapest PalindromeTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 11681 Accepted: 5532DescriptionKeeping track of all the cows can be a tricky task so Farmer John has installed a system to ...原创 2018-03-12 11:59:20 · 173 阅读 · 0 评论 -
HDU5900(区间DP)
QSC and MasterTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2408 Accepted Submission(s): 876Problem DescriptionEvery school has some lege...原创 2018-03-11 21:24:59 · 120 阅读 · 0 评论 -
628D - Magic Numbers(数位dp)
D. Magic Numberstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputConsider the decimal presentation of an integer. Let's call a number d-magic if di...原创 2018-04-02 12:13:38 · 276 阅读 · 0 评论 -
POJ 1185 炮兵阵地(状压dp)
炮兵阵地Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 30877 Accepted: 11922Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队...原创 2018-04-02 22:42:23 · 86 阅读 · 0 评论 -
HDU-6357Hills And Valleys(用最长可重复公共子序列求最长非递减子序列)
传送门思路:对于一个串,如果我们知道了它翻转后最长的非递减子序列,那它去重之后一定是a1<a2<a3……<an 这种形式,ai只能取0~9。所以我们可以求出原序列最大值, 最小值,构造一个pat匹配串,VL,VL+1,……VH,然后枚举翻转每一个区间(一共是C(10,2)个),和原串做最长公共子序列。在翻转区间的时候要多加上端点值,比如说, 122432445, pa...原创 2018-08-09 12:00:44 · 246 阅读 · 0 评论 -
HYSBZ - 4753最佳团体(01分数规划+树形dp)
传送门思路:首先这是一道01分数规划,二分枚举答案也就是 成立,l=mid,提高答案, 否则 r=mid, 减小答案然后是树形dp,有两种方法:第一种:直接dp, dp[i][j]为i节点必选,以i为根节点的子树选择j个的最大值转移方程为 rt根节点+其他子树选j个, 该子树选c个第二种:先求出dfs序, 再dp;if(dp[i][j]+val[i]>dp[i+1...原创 2018-08-04 22:42:19 · 147 阅读 · 0 评论 -
基环树DP BZOJ1040 && 牛课暑假多校第二场B discount
思路:基环树就是树多加一条边使之有一个环。基本的思路就是树形dp,只不过它是有环的。当取环上一个元素作为开始点时, 他会对他上一个节点产生影响。所以要想法设法将环破坏掉 1040骑士#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1000006;struct...原创 2018-07-23 11:56:09 · 276 阅读 · 0 评论 -
Lighting System Design UVA - 11400(dp)
思路:根据题意,只能用等级大的替换等级小的,所以先将灯排序,接下来就是如何替换的问题, 可以证明 替换一定是连续的替换,假如说有 a, b, c, d三个灯, 替换非连续替换,就是说d替换了a, c,没有替换b, 这也就是说b的花费是足够小,无法让d替换,那么b一定可以替换a,也就是说b替换了a, d替换了c;所以转移方程为 dp[i]=min(dp[i], dp[j]+lamp[i].c*...原创 2018-07-17 12:47:16 · 112 阅读 · 0 评论