随笔分类 - DP
摘要:题目传送门 1 /* 2 题意:这题就是求b+1到a的因子个数和。 3 数学+DP:a[i]保存i的最小因子,dp[i] = dp[i/a[i]] +1;再来一个前缀和 4 */ 5 /************************************************ 6 ...
阅读全文
摘要:题目传送门
阅读全文
摘要:题目传送门 1 /* 2 递推DP: 如果a, b, c是等差数列,且b, c, d是等差数列,那么a, b, c, d是等差数列,等比数列同理 3 判断ai-2, ai-1, ai是否是等差(比)数列,能在O(n)时间求出最长的长度 4 */ 5 #include ...
阅读全文
摘要:题目传送门 1 /* 2 题意:给一个区间,问任意两个数的素数因子的GCD最大 3 数学+dp:预处理出f[i],发现f[i] 7 #include 8 #include 9 #include 10 #include 11 using namespace std;12 13 c...
阅读全文
摘要:题目传送门 1 /* 2 题意:求一个点为根节点,使得到其他所有点的距离最短,是有向边,反向的距离+1 3 树形DP:首先假设1为根节点,自下而上计算dp[1](根节点到其他点的距离),然后再从1开始,自上而下计算dp[v], 4 此时可以从上个节点的信息递推...
阅读全文
摘要:题目传送门 1 /* 2 DP:先用l,r数组记录前缀后缀上升长度,最大值会在三种情况中产生: 3 1. a[i-1] + 1 7 #include 8 #include 9 using namespace std;10 11 const int MAXN = 1e5...
阅读全文
摘要:题目传送门 1 /* 2 DP:从1到最大值,dp[i][1/0] 选或不选,递推更新最大值 3 */ 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 typedef long lon...
阅读全文
摘要:题目传送门 1 /* 2 题意:上司在,员工不在,反之不一定。每一个人有一个权值,问权值和最大多少。 3 树形DP:把上司和员工的关系看成根节点和子节点的关系,两者有状态转移方程: 4 dp[rt][0] += max (dp[son][1], dp[son]...
阅读全文
摘要:题目传送门 1 /* 2 题意:寻找一个根节点,求min f(u) = ∑ρ(v, u) * p(v)。ρ(v, u)是u到v的距离,p(v)是v点的权值 3 树形DP:先从1出发遍历第一次,sum[u]计算u到所有子节点v的路径权值(之后的点路径有叠加,所以先把路径权值加后*w),...
阅读全文
摘要:题目传送门/* 题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大 DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[i][j], dp[i/1-i][j-2] + a[i][j]); 要从前面一个...
阅读全文
摘要:题目传送门 1 /* 2 题意:选择k个m长的区间,使得总和最大 3 01背包:dp[i][j] 表示在i的位置选或不选[i-m+1, i]这个区间,当它是第j个区间。 4 01背包思想,状态转移方程:dp[i][j] = max (dp[i-1][j], dp[i-...
阅读全文
摘要:题目传送门 1 /* 2 题意:选择a[k]然后a[k]-1和a[k]+1的全部删除,得到点数a[k],问最大点数 3 DP:状态转移方程:dp[i] = max (dp[i-1], dp[i-2] + (ll) i * cnt[i]); 4 只和x-1,x-2有关,...
阅读全文
摘要:题目传送门 1 /* 2 题意:求最大矩形(全0)的面积 3 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 4 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 5 详细解释:http://www.cnblogs.com/cszlg/p/321...
阅读全文
摘要:题目传送门题意:中文题面分析:LIS(非严格):首先我想到了LIS,然而总觉得有点不对;每个数先减去它的下标,防止下面的情况发生:(转载)加入序列是1,2,2,2,3,这样求上升子序列是3,也就是要修改2个,但是中间的两个2,变化范围又不能超过(1,3)那么这样求的也就是不对的,但是减掉之后,相当于...
阅读全文
摘要:题目传送门 1 /* 2 题意:b+1,b+2,...,a 所有数的素数个数和 3 DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1;否则它可以从一个数乘以素数递推过来 4 最后改为i之前所有素数个数和,那么ans = dp[...
阅读全文
摘要:题目传送门 1 /* 2 题意:从上到下,找最短路径,并输出路径 3 DP:类似数塔问题,上一行的三个方向更新dp,路径输出是关键 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include ...
阅读全文
摘要:题目传送门 1 /* 2 题意:每棵树给出坐标和高度,可以往左右倒,也可以不倒 3 问最多能砍到多少棵树 4 DP:dp[i][0/1/2] 表示到了第i棵树时,它倒左或右或不动能倒多少棵树 5 分情况讨论,若符合就取最大值更新,线性dp,自己做出来了:) 6 */ ...
阅读全文
摘要:题目传送门 1 /* 2 简单递推DP:读题烦!在区间内的都更新一遍,dp[]初始化INF 3 注意:s1与s2大小不一定,坑! 4 详细解释:http://blog.csdn.net/kk303/article/details/6847948 5 */ 6 #include...
阅读全文
摘要:题目传送门 1 /* 2 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 3 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + 1);前者表示蛋没碎,则往高处(y-i)搜索 4 ...
阅读全文
摘要:题目传送门 1 /* 2 题意:给出少了若干卡片后的总和,和原来所有卡片,问少了哪几张 3 DP:转化为少了的总和是否能有若干张卡片相加得到,dp[j+a[i]] += dp[j]; 4 记录一次路径,当第一次更新的时候 5 */ 6 #include 7 #inc...
阅读全文