![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【算法】搜索,DP,串
文章平均质量分 53
搜索 dp 串
StarsWhisper
䮸䶵䲑䪂䌨䵄
展开
-
破事水,一道泯若众题区间dp The Sports Festival
The Sports Festival题目描述给你一个序列(数据可重复),你可以将其任意排序,最小化Σi=1n(前i个数的极差)给你一个序列(数据可重复), 你可以将其任意排序, 最小化 \\ \Sigma_{i = 1} ^ n (前i个数的极差)给你一个序列(数据可重复),你可以将其任意排序,最小化Σi=1n(前i个数的极差)思路0.排一下序1.首先我们不可能先选一个最大的,再选一个最小的, 如果这样选就得到了最大值, 就g了, 除非数据特殊2.那我们肯定是要循序渐进一点点增大极差,原创 2021-10-21 16:14:30 · 129 阅读 · 0 评论 -
【换根DP】Tree and Permutation
Tree and Permutation题目大意给你一颗n个点的树, 有边权,求这个东西:Σi=1nΣj=1ndis[i to j]∗(n−1)!\Sigma_{i = 1} ^n \Sigma_{j = 1}^n dis[i~to~j] * (n - 1) !Σi=1nΣj=1ndis[i to j]∗(n−1)!换根dp用换根dp算前面一坨, 然后 * (n - 1)!先dfs(类似树形dp)求任意一个点到所有点的距离part[a]。然后可以原创 2021-10-07 21:03:24 · 100 阅读 · 0 评论 -
【树的直径】树形DP求解
思路每次记录每个子树从根到叶的最长的链, 然后把最长前2长的拼起来先更新D再更新dp, 否则会求出一条最长链*2void dfs(int x, int efr){ for(int e = head[x]; e; e = edg[e].nxt){ if((e ^ 1) == efr) continue; int y = edg[e].to; dfs(y, e); D = std::max(D, dp[x] + dp[y] + 1);原创 2021-09-13 12:13:34 · 110 阅读 · 0 评论 -
【状压DP】斯坦纳树
前言斯坦纳树常用于解决类似这样的最小代价联通问题:https://www.luogu.com.cn/problem/P4294思路tip1:对于一个结点, 通过状态压缩的思想,用一个整数sta表示这个结点与所有目标节点的联通状态, 在sta的二进制位中,若第x位为1,表示该结点与第x个目标结点联通,反之则为不连通用dp[i][sta]表示结点i联通sta状态的最小代价状态转移part1若结点i与状态sta1和sta2都联通,且sta1与sta2无重合结点(即sta1, sta2 是对sta1+原创 2021-09-05 22:16:25 · 284 阅读 · 0 评论 -
【数位DP】 洛谷 P2602 [ZJOI2010]数字计数 P2657 [SCOI2009] windy 数
洛谷 P2602 [ZJOI2010]数字计数#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <string>#include <queue>#include <vector>#include &l原创 2021-04-29 21:49:43 · 147 阅读 · 1 评论 -
【Trie树&AC自动机】P3879[TJOI2010]阅读理解 P3808 【模板】AC自动机(简单版)P3796 【模板】AC自动机(加强版)
洛谷 P3879[TJOI2010]阅读理解#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <string>#include <queue>#include <vector>#include <原创 2021-04-23 18:07:33 · 123 阅读 · 0 评论 -
【tarjin算法练习 缩点,割点,割边】洛谷 P3387缩点模板P3388割点模板 HDU4738 caocao‘bridge
洛谷 P3387缩点模板vis数组是必要的,如果遇到vis[i]=false的点,说明此点对应的强连通已经被缩点过了,而访问的i的起点并不属于这一强连通分量。若这时执行low[x] = std::min(low[x],dfn[y]);可能会导致一些点在栈内无法弹出。#include <cstdio>#include <iostream>#include <cstring>#include <cstdlib>#include <algorith原创 2021-04-13 22:31:40 · 156 阅读 · 0 评论 -
【状压dp练习】洛谷P1896 [SCOI2005]互不侵犯 P2704 [NOI2001]炮兵阵地
可以把一种只有两种状态的一维的数据组用一个整数表示,其二进制的值可以表示每一个位置的状态。如:1010 表示第1、3个位置有,第2、4个位置没有。洛谷 P1896 [SCOI2005]互不侵犯init函数枚举所有的m位不存在两个相邻的1的整数,将整数的值记录在status数组中,将此数含有1的数量记录在cnt数组中dp[i][s][n] 表示进行道第i行时,在第s个状态,使用了n个国王的情况数。#include <cstdio>#include <iostream>#in原创 2021-04-07 19:28:47 · 136 阅读 · 0 评论 -
【折半搜索】 洛谷 P4799 [CEOI2015 Day2]世界冰球锦标赛
普通搜索在这道题中存在的问题一共最多有40场比赛,每一场比赛有看和不看2种选择,如果求看40场比赛一共有多少选择,最多有2^40种可能性,时间复杂度太高。折半搜索1.把这40场比赛拆开,看成2个20场的比赛分别进行常规搜索。但是这两次常规搜索得到的所有的可能性都要用数组记录下来。(数组中记录的是所有的可能性所花费的金钱,若金钱有相同的,也会重复记录下来,因为我们不是要找到所有的花费数目,而是找到所有的看比赛的可能性花费的金钱)2.把其中一个用于记录的数组排序。3.遍历另一个没排序的数组,假设其为s原创 2021-04-03 15:18:11 · 118 阅读 · 0 评论 -
【树形dp练习】洛谷 P2014选课 P1352没有上司的舞会P2016战略游戏
洛谷 P2014选课#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>#include <cstring>#include <cmath>#include <queue>#include <vector>#include <stack>#include <map>type原创 2021-03-23 19:20:01 · 73 阅读 · 0 评论 -
【区间DP练习】洛谷 P1880[NOI1995]石子合并 P1063能量项链P2654 原核生物培养
洛谷 P1880[NOI1995]石子合并https://www.luogu.com.cn/problem/P1880环形的石子合并,可以把环形拆开,在末尾接一份自己的复制当线形来做dp数组也需要在右端外接一份自己的复制犯错:因为dp公式会访问到j+1的下标,,刚开始用的if(j>=n)判断越界 ,在j=n-1时会访问到下标为n的位置导致越界,所以一直出错应该改为if(j+1>=n)#include <cstdio>#include <iostream>原创 2021-03-19 14:22:42 · 115 阅读 · 2 评论 -
【背包DP练习】洛谷 P5020货币系统 P1757通天之分组背包 P1064[NOIP2006 提高组]金明的预算方案 P5322 [BJOI2019]排兵布阵
洛谷 P5020货币系统https://www.luogu.com.cn/problem/P5020思路是把货币从小到大排序,然后按顺序依次完全背包dp,每次dp检查i-1种面值的货币能不能凑出第i种货币.最后四个样例数据范围比较大,但应该都不是需要时间特别长的,而是卡一些技巧。80分代码:修改一(不是亿)点点就可以满分#include <cstdio>#include <iostream>#include <cstring>#include <a原创 2021-03-17 19:48:32 · 199 阅读 · 0 评论 -
【01背包DP练习】洛谷 P1048采药 P1060开心的金明 P1855榨取kkksc03
洛谷 P1048采药https://www.luogu.com.cn/problem/P1048#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>#include <queue>#include <map>#include <原创 2021-03-14 21:47:44 · 78 阅读 · 0 评论 -
【线形DP练习】洛谷 P1868饥饿的奶牛 P1091合唱队形 P1541乌龟棋 P1020导弹拦截
洛谷 P1868 饥饿的奶牛思路:dp[N]表示 在前i块草皮中最多能吃到几块sort 把所有区间按照右端的大小排序for 遍历0-区间中出现过的最大长度{dp[i] = dp[i-1] (继承上一个草皮的dp)若存在区间[x,y] 则dp[x] = max ( dp[y] , dp[x-1]+len([x,y]) )}#include <cstdio>#include <iostream>#include <cstring>#inclu原创 2021-03-14 10:15:00 · 130 阅读 · 0 评论 -
记忆化搜索(貌似,不太清楚是不是,自己摸索题的时候猜了一个) L3-025 那就别担心了 (30 分)
题目https://pintia.cn/problem-sets/994805046380707840/problems/1336215880692482060下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题,其实都不用担心。博主将这种逻辑推演称为“逻辑自洽”,即从某个命题出发的所有推理路径都会将结论引导到同一个最终命题(开玩笑的,千万别以为这是真正的逻辑自洽的定义……)。现给定一个更为复杂的逻辑推理图,本题就请你检查从一个给定命题到另一个命题的推理是否是“逻辑自洽”的,以及存在原创 2021-03-06 21:06:02 · 133 阅读 · 0 评论 -
【嵌套bfs】A - Pushing Boxes POJ - 1475 推箱子
https://vjudge.net/contest/387870#problem/A题目描述Imagine you are standing inside a two-dimensional maze composed of square cells which may or may not be filled with rock. You can move north, south, east or west one cell at a step. These moves are called wa原创 2020-08-15 23:15:56 · 344 阅读 · 0 评论 -
【DP】石子合并
1 线形石子合并参考题目 https://www.acwing.com/problem/content/284/题目要求最小代价大致思路为:有n组石头排成一条线,规定把第i组和第i组合并(自己合并自己),代价为01.求所有相邻的两堆石头合并的代价2.求所有相邻的三堆石头合并的代价,之前求出的两堆石头合并的代价可以作为前提3.求所有相邻的四堆石头合并的代价,之前求出的两堆石头合并的代价和三堆石头合并的代价都可以作为前提…n-1.求相邻的n堆石头合并的代价,之前求出的【2,n-1】堆石头合并原创 2020-10-08 11:16:05 · 211 阅读 · 0 评论 -
【算法】【C++】初学算法,在此记录
0.预留位置1.使用Manacher算法求最长回文子串给出一个字符串,要求计算出这一字符串的最长回文子串的长度。如果遍历每一个字符,并以该字符为中心向两边查找,则其时间复杂度为O(n2)。Manacher算法,又被戏称为“马拉车”算法,可以在时间复杂度为O(n)的情况下求解一个字符串的最长回文子串的长度。1.回文串分为奇回文(abcba)和偶回文(baccba),为了避免区分奇偶的麻烦,把字符串变一下形式,在字符串之间加入特殊符号,并且首位再加不同的特殊符号以防越界,于是字符串变成奇回文(上原创 2020-07-22 18:52:28 · 281 阅读 · 0 评论