
思维
Absoler
这个作者很懒,什么都没留下…
展开
-
codeforces/1312E(区间dp)
题目这道题不管从内容还是数据范围看起来都像是区间dp,可一时想不出来怎么构造出一个满足无后效性的区间状态,看了一眼题解才顿悟。分两步走,第一步我们求出所有的dp[l][r],表示[l,r]区间可以最终转化为的一个数,如果无法转化则为零,这一步的巧妙就在于包含了足够的信息来“总结”这个区间。第二步我们用前缀dp,设dp2[i]表示前i个元素最少合并为几个点,容易求出。#include&...原创 2020-03-21 22:26:25 · 474 阅读 · 0 评论 -
区间DP
HDU4283题目中的小黑屋就是一个栈,因此在处理区间时要考虑栈的特点,即“区间嵌套性”。我们令dp[i][j]代表区间[i , j]的最小代价,注意这里是单看这一个区间,即a[i]为首元素。接下来讨论a[i]的出现次序,设第k个出现,则[i+1, i+k-1]元素必将在第1~k-1个次序出现,因为a[i]入栈后在栈底,第k个出现则意味着之前k-1个元素即使入栈,也早已出栈,可视为同结构的子状...原创 2019-10-28 00:49:04 · 126 阅读 · 0 评论 -
HDU6592&杭电多校第二场B
单调栈解法#include<iostream>#include<cstdio>#include<cstring>#include<stack>using namespace std;const int maxn=3e5+4;int pos1[maxn],pos2[maxn],d[maxn]; //pos1[i]表示以i位置结尾的...原创 2019-10-25 00:37:03 · 142 阅读 · 0 评论 -
poj 1920 汉诺塔变种
思维题 链接暂时没明白为啥好多poj的总结把它放在dp里题目大意:现有汉诺塔残局,也就是说盘子零散地插在三个钉子上,当然各自也都遵守“上小下大”的摆放规律。求将其全部整理至一个钉子上所需最少步数,输出最后所在钉子位置(1,2,3)以及最小步数。首先对于基础的汉诺塔问题,由数列递推式可得,将高度为n的塔从一个钉子上转移到另外一个钉子上所需步数为(2^n-1)对于本题目,可逆向考虑,即...原创 2018-09-13 00:42:21 · 406 阅读 · 0 评论 -
强连通分量分解
知识背景:首先明确强连通分量(strongly connected component)的概念,从任一顶点能够到达任一其他顶点的有向图 的顶点子集,而任意有向图均可以分解成若干不相交的scc。把每个scc视作一个顶点,可得到一个DAG。实现算法:两次dfs,第一次 dfs 遍历将顶点后序(post order)记录下来vs(vector),这里需要注意的是,不管从哪个点dfs,由于是后序记录,...原创 2018-07-24 11:12:36 · 690 阅读 · 0 评论