随笔分类 -  动态规划 一般DP

摘要:【算法】贪心,一般DP 【题解】 胡策k≤10的环状DP做法: 1.钦定法:先确定第一位(可能和第n位)的状态,然后后面正常做DP,显然正确答案是一定会被记录的,因为从整体上看不会有影响。 2.环的特性:取的段和不取的段数量相等,位置互补。所以1和n的连接处都选或都不选都会有不被包括的情况,一选一不 阅读全文
posted @ 2017-06-27 20:13 ONION_CYC 阅读(484) 评论(0) 推荐(0)
摘要:【算法】DP 【题解】f[i][j][0]表示在i,j位置往下走的球数,f[i][j][1]表示在i,j位置往右走的球数,经过i,j的球若为-1则(num+1)/2往下,其余往右。+1类似。 转移见代码。 #include<stdio.h> #include<cstring> #include<cc 阅读全文
posted @ 2017-06-20 21:35 ONION_CYC 阅读(331) 评论(0) 推荐(0)
摘要:【算法】动态规划 【题解】经典模型:最长上升子序列(n log n) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=50010; int a[maxn],b[max 阅读全文
posted @ 2017-06-06 20:58 ONION_CYC 阅读(187) 评论(0) 推荐(0)
摘要:【算法】DP #include<cstdio> #include<algorithm> using namespace std; const int MOD=1000000007,maxn=1010; int f[maxn][maxn]; int mods(int x) {return x>MOD? 阅读全文
posted @ 2017-06-03 14:16 ONION_CYC 阅读(238) 评论(0) 推荐(0)
摘要:【算法】DP 【题解】开long long…… #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=50010; int a[maxn],n; int main() { 阅读全文
posted @ 2017-05-29 22:04 ONION_CYC 阅读(120) 评论(0) 推荐(0)
摘要:【算法】经典DP 【题解】经典lcs,输出路径可以记录上一个有效节点就是有点麻烦。 因为开始时写法不太明确,打印结果时初始循环地方搞错了,后来修正写法时忘了改过来,调了好久。 #include<cstdio> #include<algorithm> #include<cstring> #define 阅读全文
posted @ 2017-05-24 19:16 ONION_CYC 阅读(266) 评论(0) 推荐(0)
摘要:【算法】(manacher+贪心)||(manacher+DP+树状数组/线段树) 【题解】 manacher求回文串,后得到线段,做一点计算映射回原串线段。 然后问题转化为可重叠区间线段覆盖问题,可以贪心解决。 排序左端点,同一左端点取最长段,然后在此段中找到右端点最靠右的线段,线性更新并累加。 阅读全文
posted @ 2017-04-05 21:19 ONION_CYC 阅读(375) 评论(0) 推荐(0)
摘要:【算法】DP 【题解】f1[i]表示第i棵树当前高度能得到的最多果子数 f2[i]表示高度i能得到的最多果子数。 于是有: f1[j]=max(f1[j],f2[i+delta])+mp[j][i]; f2[i]=max(f2[i],f1[j]); 注意i+delta的范围。 #include<cs 阅读全文
posted @ 2017-01-03 13:48 ONION_CYC 阅读(204) 评论(0) 推荐(0)
摘要:【动态规划杂记】状态+转移 参考:夜深人静写算法(二) - 动态规划 核心:划分阶段-状态表示-状态转移方程。 复杂度:状态数O(n^t),转移O(n^e),则称为tD/eD问题。 1.最优化问题和方案数问题常考虑DP,特定数问题不考虑DP。 2.断层思想:划分状态,从计算过的状态去答案,这就是无后 阅读全文
posted @ 2016-11-29 14:17 ONION_CYC 阅读(1937) 评论(0) 推荐(1)
摘要:【算法】动态规划+后缀表达式 【题解】 先把算式转为后缀表达式后进行DP 令f[s][0]表示使表达式答案为0的方案数 f[s][1]表示使表达式答案为1的方案数 (加法) f[a+b][1]=f[a][0]*f[b][1]+f[a][1]*f[b][0]+f[a][1]*f[b][1] f[a+b 阅读全文
posted @ 2016-08-13 20:23 ONION_CYC 阅读(1123) 评论(1) 推荐(1)
摘要:【算法】DP||贪心 【题解】 (1)动态规划: 令f[i][0..1]为两种条件下前i株花的最大保留数量,状态转移方程: f[i][0]=max(f[j][1]+1) (j=i-1...1)(h[i]>h[j]) f[i][1]=max(f[j][0]+1) (j=i-1...1)(h[i]<h[ 阅读全文
posted @ 2016-08-13 09:13 ONION_CYC 阅读(655) 评论(0) 推荐(0)
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡 阅读全文
posted @ 2016-08-10 21:08 ONION_CYC 阅读(2144) 评论(0) 推荐(6)