摘要: 算法思想 概念:区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来由很大的关系。令状态dp[i][j]表示将下标位置i到j的所有元素合并能获得的价值的最大值. 状态转移方程: $dp[i][j] = max\{dp[i][k] + dp[ 阅读全文
posted @ 2020-02-14 17:17 西风show码 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 数位DP的算法思想 数位DP放弃了原来数要从1连续枚举到N逐个检查合法性的思想,而是专注于数本身的字符串构成特性 对于每一种限制条件,dp数组都设置了一维表示。比如dp[pos][s1][s2]...[sn].表示在pos位置下,之前限制条件s1 s2 ... sn的状态,当枚举当前pos处的数字i 阅读全文
posted @ 2020-02-14 11:50 西风show码 阅读(182) 评论(0) 推荐(0) 编辑
摘要: VS2017下简单代码的反汇编分析 阅读全文
posted @ 2020-02-13 12:18 西风show码 阅读(615) 评论(0) 推荐(0) 编辑
摘要: 寻找第K大的数 直接排序 排序后直接返回相应下标 若要求同样大的元素算作一个数的话可以使用unique函数 时间复杂度:O(nlogn) 堆排序 以初始序列建大根堆,然后弹出K 1个数字,此时堆顶部就是第K大的数字,可以直接使用优先队列 阅读全文
posted @ 2020-02-12 21:00 西风show码 阅读(233) 评论(0) 推荐(0) 编辑
摘要: ``` #include #include #include using namespace std; //ADT typedef struct BiTNode{ char data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; //建树 void build(BiTree &T){ char ch; cin>>ch;... 阅读全文
posted @ 2019-08-25 15:52 西风show码 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 树链剖分 问题 将树上x到y最短路径上所有结点的值都加上z 可以用树上差分,cf[x]+=z ; cf[y]+=z; cf[lac(x,y)] = z; cf[fa[lca(x,y)]] = z; 求树上从x到y结点最短路径的点权和或者边长和 dist = dis[x] + dis[y] 2 dis 阅读全文
posted @ 2019-05-28 13:37 西风show码 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 树上差分 点差分 cf[maxn] cf[i]记录点i被经过了多少次 当s t最短路径上每个点都被经过一次,则: 边差分 cf[maxn] 记录点i到其父节点的边被经过了多少次 当s t最短路径上每个边都被经过一次,则: 核心算法 LCA,可以用倍增法,在线求LCA(s,t), DFS遍历树得到差分 阅读全文
posted @ 2019-05-27 20:56 西风show码 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 母函数 定义 又称生成函数,用多个独立多项式相乘来解决组合问题。 只关心多项式的系数,而不关心变量x的取值 普通型母函数 HDU 1085 题意:给你1,2,5这几个硬币,每一个有a,b,c个,问你最小的不能达到的价值是多少? 代码 c++ include include using namespa 阅读全文
posted @ 2019-05-26 22:44 西风show码 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 单调队列 作用 解决滑动窗口最值问题,使得原数组每个元素最多入队和出队1次,就能够求出所有窗口的最值,避免了重复比较求最值 优化其他算法 性质 以维护滑动窗口最小值为例 需要构建单调递增双端队列,使得队首保存当前窗口最小值在原数列中所处的位置 遍历原数组 若当前值大于队尾值或者队列为空,则直接把当前 阅读全文
posted @ 2019-05-15 12:43 西风show码 阅读(121) 评论(0) 推荐(0) 编辑
摘要: c++ include include include include include include include include include include include using namespace std; typedef long long ll; const double EP 阅读全文
posted @ 2019-05-02 19:37 西风show码 阅读(174) 评论(0) 推荐(0) 编辑