dp
Fiveneves
这个作者很懒,什么都没留下…
展开
-
2020牛客暑期多校训练营(第五场)D.Drop Voicing
D.Drop Voicing 题目链接-D.Drop Voicing 题目大意 给定一个1−n1-n1−n的排列ppp,有两种操作: 将倒数第二个数放到开头 将第一个数放到最后 如果是连续的第一种操作,则只花费1,第二种操作不花费,求最少的花费使得ppp变成一个升序的排列 解题思路 LISLISLIS 连续的操作111我们可以看成是前n−1n-1n−1个元素执行若干个循环移位,而连续的操作222我们可以看成是整个数组执行若干次循环移位 因为第二种操作是免费的,所以我们可以把排列ppp看成一个环,原创 2020-07-29 02:38:47 · 150 阅读 · 0 评论 -
2020牛客暑期多校训练营(第三场)E.Two Matchings
E.Two Matchings 题目链接-E.Two Matchings 题目大意 定义序列 ppp,满足如下要求: 是长度为nnn的排列 满足ppi=i且pi≠ip_{p_i}=i且p_i≠ippi=i且pi=i 定义一个字符串的费用为(p=∑n=1Nabs(ai−api))/2(p = \sum\limits_{n=1}^Nabs(a_i-a_{pi}))/2(p=n=1∑Nabs(ai−api))/2,aaa为给出的权值数组 现求两个满足上述描述的序列p,qp,qp,q ,同时原创 2020-07-24 22:30:55 · 189 阅读 · 0 评论 -
洛谷 P1091 合唱队形
P1091 合唱队形 题目链接-P1091 合唱队形 解题思路 DPDPDP 因为需要保证队形是先升后降的,最少的同学出列即是留下最多的同学,所以我么可以正向(1→n)(1→n)(1→n)和反向(n→1)(n→1)(n→1)分别求一次最长递增子序列,然后再枚举以aia_iai作为最高同学队列中的人数,取最大值即可 dp[0][i]表示正向时以第iii个人结尾最长递增子序列,dp[1][i]表示反向时以第iii个人结尾最长递增子序列,那么以aia_iai作为最高同学队列中的人数就为dp[0][i]+原创 2020-07-15 02:21:52 · 289 阅读 · 0 评论 -
洛谷P1439 【模板】最长公共子序列
题目链接-P1439 【模板】最长公共子序列 #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #define int long long #define lowbit(x) (x &(-x)) #define endl '\n' using namespace std; const int INF=0x3f3f3f3f; const int dir[4][2]={-1,0,1,0,0,原创 2020-07-11 01:34:23 · 283 阅读 · 0 评论 -
洛谷 P2758 编辑距离
P2758 编辑距离 题目链接-P2758 编辑距离 解题思路 DPDPDP dp[i][j]dp[i][j]dp[i][j]代表AAA的前iii个字符和BBB的前jjj个字符之间的最小编辑距离 dp[0][j]=jdp[0][j] = jdp[0][j]=j是将AAA为空时,变换为BBB的最少步数,全都是插入操作,dp[i][0]=idp[i][0] = idp[i][0]=i是将BBB为空时,AAA变换为BBB的最少步数,全都是删除操作 当两个字符串都为空串,那么编辑距离为0,当其中一个字符串为空串原创 2020-07-10 01:39:49 · 284 阅读 · 0 评论 -
Codeforces Round #641 (Div. 2) B. Orac and Models
B. Orac and Models 题目链接-B. Orac and Models 题目大意 解题思路 附上代码 #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> #define int long long #define lowbit(x) (x &(-x)) #define endl '\n' using namespace std; const int INF=0x3f3f3原创 2020-05-16 16:26:17 · 137 阅读 · 0 评论 -
AtCoder Grand Contest 043 A - Range Flip Find Route
A - Range Flip Find Route 题目链接-A - Range Flip Find Route 题目大意 给你一个矩阵,只能向下或向右走,请你求出从(1,1)(1,1)(1,1)到(h,w)(h,w)(h,w)路径全为白的最少翻转次数 解题思路 DPDPDP 定义一个二维数组dp[h][w],其中dp[i][j]代表到达点(i,j)(i,j)(i,j)时候黑块的最少块数 输入时对矩阵进行处理,如果是#(黑块),说明如果经过需要反转,则mp[i][j]=1,否则mp[i][j]=0原创 2020-05-16 01:59:15 · 250 阅读 · 0 评论 -
蓝桥杯试题 历届试题 买不到的数目(第四届蓝桥杯省赛C++A组)
买不到的数目 题目链接-买不到的数目 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。 小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。 你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组...原创 2020-03-21 16:57:24 · 493 阅读 · 0 评论 -
2020 蓝桥杯大学 B 组省赛模拟赛(一)B.结果填空:爬楼梯
B.结果填空:爬楼梯 题目链接-爬楼梯 题目 蒜头君要爬楼梯。楼梯一共有 10 层台阶。因为腿长的限制,每次最多能上 4 层台阶。但是第 5,7 层楼梯坏掉了不能踩。求上楼梯的方案数 解题思路 dfs,dp都行 具体思路见代码 答案是72 注意:最开始蒜头君是在第0层而不是第一层 附上代码 代码1: dfs,因为第 5,7 层楼梯坏掉了不能踩且楼梯只有10层,所以递归到x=5或 x=7或x>...原创 2020-03-01 14:42:30 · 3357 阅读 · 0 评论 -
数据结构与算法题目集(中文)7-1 最大子列和问题
7-1 最大子列和问题 题目链接-7-1 最大子列和问题 输入样例: 6 -2 11 -4 13 -5 -2 输出样例: 20 解题思路 dp入门题 第一个数为一个有效序列 如果一个数加上上一个有效序列得到的结果比这个数大,那么该数也属于这个有效序列。 如果一个数加上上一个有效序列得到的结果比这个数小,那么这个数单独成为一个新的有效序列 状态转移方程为dp[i]=max(dp...原创 2020-02-23 15:19:27 · 212 阅读 · 0 评论 -
2020牛客寒假算法基础集训营2 C.算概率
C.算概率 题目链接-算概率 解题思路 比赛的时候没有想到状态转移方程,太菜了 概率DP,dp[i][j]表示前i道题做对j道的概率 由于i-1时对了j题,所以第i题做错了; 由于i-1时对了j-1题,所以第i题对了; 所以可得到状态转移方程: dp[i][j] = dp[i-1][j] * p[i] + dp[i-1][j] * (1-p[i]) 注意取模为负的情况,所以可将(1-p[i])...原创 2020-02-10 17:42:02 · 181 阅读 · 0 评论 -
2020牛客寒假算法基础集训营3 A.牛牛的DRB迷宫I
A.牛牛的DRB迷宫I 题目链接-牛牛的DRB迷宫I 解题思路 棋盘型DP,从起点(1,1)开始for循环遍历,如果是D就往下累加,如果是R就往右累加,如果是B就同时累加 附上代码 递推(比赛的时候写了好久,卑微蒟蒻) #include<bits/stdc++.h> using namespace std; const int INF=0x3f3f3f; const int M...原创 2020-02-09 01:07:27 · 146 阅读 · 0 评论 -
2020牛客寒假算法基础集训营2 H.施魔法
H.施魔法 题目链接-施魔法 解题思路 DP,dp[i]表示用掉前 i 个元素的最小代价; 先将元素按照能量值从小到大排序 因为至少要取k 个,所以前面k−1 个是不能直接取到的,所以 前i−1个的dp值为INF 当我们计算第i个元素的时候,它肯定是最大元素,第i-1个元素就不是最大的了,所以维护min{dp[j]−a[j+1]} (j∈[0,i−k])即可,可得到状态转移方程dp[i...原创 2020-02-08 22:58:56 · 165 阅读 · 0 评论 -
2020牛客寒假算法基础集训营1 I.nico和niconiconi
nico和niconiconi 题目链接-nico和niconiconi 解题思路 DP,计dp[i]为前i个字符的最大计分分数 附上代码 #include<bits/stdc++.h> using namespace std; #define ll long long const int INF=0x3f3f3f;, const int N=3e5+5; typedef pair...原创 2020-02-06 22:55:04 · 171 阅读 · 0 评论 -
洛谷P1880 [NOI1995]石子合并
P1880 [NOI1995]石子合并 题目链接-石子合并(环形) 解题思路 -区间DP 因为是环形,所以可以把环拆成链,也就是将长度扩大2倍; 用二维数组dp[l][r],l表示左边的坐标,r表示右边的坐标 设dp1[i][j]表示把从i到j的石子合并为一堆的最小得分,dp2[i][j]表示把从i到j的石子合并为一堆的最大得分(i<j) dp过程的循环要先枚举dp区间的长度,再枚举左端...原创 2020-02-03 01:40:10 · 398 阅读 · 0 评论 -
Codeforces Round #610 (Div. 2)B1+B2 K for the Price of One
**B1+B2. K for the Price of One ** 题目链接-K for the Price of One (Easy Version) 题目链接-K for the Price of One (Hard Version) 题目大意 商店买东西,商店有n个物品,每个物品有自己的价格,商店有个优惠活动. 当你买恰好k个东西时可以只为其中最贵的那个付款,或者买一个东西单独付款 求有限...原创 2020-02-01 01:22:41 · 268 阅读 · 0 评论 -
Codeforces Round #612 (Div. 1)A. Garland
A. Garland 题目链接-Garland 题目大意 给你1-n个数的乱序排列,有些位置上的数为0(即该位置为空),如何用剩下的数填充这个序列,使得相邻灯泡奇偶对数最小 解题思路 四维数组线性DP 一维:长度 二维:奇数的个数 三维:偶数的个数 四维:奇偶性 附上代码 #include<bits/stdc++.h> using namespace std; #define ll...原创 2020-02-01 00:10:28 · 1445 阅读 · 0 评论 -
Codeforces Round #605 (Div. 3)D. Remove One Element
D. Remove One Element 题目链接-Remove One Element 题目大意 给你一个长度为n的数组,你最多删除一个元素(也可以不删),求此条件限制下的最长上升子串长度 解题思路 线性dp 用二维数组dp[N][2]; 不删除数时,思路很简单,状态转移方程为: if(a[i]>a[i−1]) dp[i][0]=dp[i−1][0]+1 想要删除一个数,只有在前两个...原创 2020-01-31 22:30:29 · 232 阅读 · 0 评论 -
牛客小白月赛21I love you
I love you 题目链接I love you 解题思路 简单的dp思想,因为大小写不敏感,所以先将字符串中所有的大写字母换成小写字母原创 2020-01-28 00:20:07 · 588 阅读 · 0 评论