上一页 1 ··· 53 54 55 56 57 58 59 60 61 ··· 67 下一页
摘要: 经典的区间$DP$问题。 区间$DP$特征:从小区间逐渐向大区间扩展递推。 题解 贪心只能处理“任取两堆”,而不能处理“相邻两堆”。任取两堆的题目就是合并果子。 状态表示:\(f(i,j)\):合并区间$[i,j]$的最小代价 状态转移:$f(i,j) = \begin0,i = j\ \under 阅读全文
posted @ 2020-12-15 20:38 Dazzling! 阅读(84) 评论(0) 推荐(0) 编辑
摘要: 经典哈夫曼树的模型,每次合并重量最小的两堆果子即可。 const int N=10010; int a[N]; int n; int main() { cin>>n; priority_queue<int,vector<int>,greater<int> > heap; for(int i=1;i< 阅读全文
posted @ 2020-12-15 20:14 Dazzling! 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 新名词$get$:序列自动机 思路挺好想的,一共$n$个位置,对每个位置建立$26$个指针,指向后面第一次出现对应字母的位置。倒序处理一遍即可。 注意: 不存在对应字母的话位置记为$0$ 下标$0$也要初始化 子序列进行匹配时从下标$0$开始匹配,下标$0$存放的指针代表$1~n$中第一次出现对应字 阅读全文
posted @ 2020-12-15 17:32 Dazzling! 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题意 给你一个字符串,让这个字符串变成一个至少有两个循环节的字符串,问至少添加几个字符,添加字符只能在头部和尾部添加不能在中间添加(这是个环)。 裸KMP求最小循环节。 const int N=1e5+10; char s[N]; int ne[N]; int n; void init() { fo 阅读全文
posted @ 2020-12-14 13:22 Dazzling! 阅读(40) 评论(0) 推荐(0) 编辑
摘要: $spfa$判负环裸题 const int N=510; vector<PII> g[N]; int dist[N]; bool vis[N]; int cnt[N]; int n,m,w; bool spfa() { memset(dist,0x3f,sizeof dist); memset(cn 阅读全文
posted @ 2020-12-13 20:45 Dazzling! 阅读(99) 评论(0) 推荐(0) 编辑
摘要: KMP简单变形,不能重复用字段,所以要进行一点小修改。 很自然的想到,原本在文本串中找到了模式串之后,单纯ans++,下一次循环必然是j=Next[j],就是j回溯到Next[j]位置;那么,这个时候就相当于用了一些重复字段(Next[j]位置前的那些字符,都是被重复使用了),那么显然,在ans++ 阅读全文
posted @ 2020-12-13 18:30 Dazzling! 阅读(73) 评论(0) 推荐(0) 编辑
摘要: $0-1$背包解法 适用数据范围:\(N≤40,M≤10^6\) 状态表示:\(f(i,j)\):从前$i$个物品中选,花费不超过(小于等于)$j$的方案数。 最后累加$f(n,0~m)$即可。 const int N=45,M=1e6+10; LL price[N]; LL f[M]; LL n, 阅读全文
posted @ 2020-12-13 15:18 Dazzling! 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 折半搜索,$O(n)$型枚举,二分查找相反数个数,时间复杂度(\(O(n^2logn)\)) const int N=4010; int a[N],b[N],c[N],d[N]; int ab[N*N]; int n; int main() { cin>>n; for(int i=0;i<n;i++ 阅读全文
posted @ 2020-12-13 11:15 Dazzling! 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 由于可以在任意时刻发送数据包,对于1到n的所有路径,尽管所用时间不同,可你完全可以通过调整他们的开始时间,使他们最后在同一时间到达。 故题目转换为求$1$~$n$的路径数目。规定了图为DAG,拓扑排序即可。 const int N=1e5+10; vector<PII> g[N]; int din[ 阅读全文
posted @ 2020-12-03 18:30 Dazzling! 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 分层图最短路,注意按照题意中的“穿过”的定义来模拟。 const int N=1e5+10; struct Node { int dis; int u,cnt; bool operator>(const Node &W) const { return dis>W.dis; } }; vector<P 阅读全文
posted @ 2020-12-02 23:25 Dazzling! 阅读(97) 评论(0) 推荐(0) 编辑
上一页 1 ··· 53 54 55 56 57 58 59 60 61 ··· 67 下一页