
codeforces训练
文章平均质量分 54
_九磅十五便士_
这个作者很懒,什么都没留下…
展开
-
CF1244E Minimizing Difference(二分+双指针)
题目传送门#include<bits/stdc++.h>using namespace std;#define int long longconst int N=1e6+10;int a[N];int sum[N];int n,k;bool check(int mid){ for(int i=1,j=1;i<=n;i++){ while(a[i]-a[j]>mid)j++;//j,i if((a[i]-mid)*(j-1)-sum[j-1]+sum[n]-s原创 2022-02-21 00:00:00 · 377 阅读 · 0 评论 -
CF1251D Salary Changing(二分+贪心)
题目传送门这个题是二分答案来找最大的中位数,那么中位数的性质就是第n/2+1个数的左边不小于这个数,右边不大于这个数。根据性质我们就可以很容易写出来check函数,那就是找n/2+1个工资大于mid的最大值的临界值。#include<bits/stdc++.h>using namespace std;#define int long long#define endl '\n'typedef pair<int,int>pii;int n,sl;struct node原创 2022-02-15 20:50:16 · 850 阅读 · 0 评论 -
CF1630B Range and Partition(二分+中位数的性质)
题目传送门在牛客的寒假算法训练营1中,炸鸡块君出了一个题对于中位数的结论在这里的体现也是非常恰当的:记数列中≥ ????的数字有????????????????个,< ????的数字有????????????????个,则答案为???????????????? − ????????????????,该值≤ ????时则不存在答案。那么分析这道题,我们要求[l,r][l,r][l,r]数的个数大于非[l,r][l,r][l,r]内的数的个数。那么我们怎么进行问题的转化呢?原问题其实就是让求原创 2022-02-15 18:53:43 · 738 阅读 · 0 评论 -
CF754D Fedor and coupons(优先队列)
题目传送门思路这道题我刚开始的思路,是按照l为第一关键字,r为第二关键字从小到大排完序以后,二分答案,后来wa掉了,其实就是排完序的结果未必能够连续使用。因为如果区间非常长的小比如k=31 95 65 96 10如果是用二分的话5 6是没有办法排掉的因此我们可以用优先队列,将l从小到大进行遍历,然后将右端点r压入优先队列,将小的先弹出,因为最后的答案一定是所有区间的交集,那么l是所有区间的左端点的最右边那个,右端点就是最左边那个,所以我们遍历左端点,然后保证了当前的端点已经是我们判断的端原创 2022-01-15 21:47:25 · 3910 阅读 · 0 评论 -
CF1556D Take a Guess(位运算)
题目传送门题意您可以发起不超过2∗n2*n2∗n次提问,提问的内容是对于两个不同下标的两个数ai,aja_i,a_jai,aj,可以提问他们的aia_iai&aja_jaj或者aia_iai|aja_jaj,求出整个数组,并对其排序,求出第kkk个数据。思路关于位运算,这里有个结论:(牛客多校D8-D)ai+aj=aia_i+a_j=a_iai+aj=ai & aj+aia_j+a_iaj+ai | aja_jaj那么我们就可以询问aia_iai和任何位原创 2021-08-30 08:30:51 · 177 阅读 · 0 评论 -
全排列模型
做CF的时候会发现一些题有相似的手法解决题目传送门-CF1555D Say No to Palindromes题意这道题其实就是不希望这次询问的这个区间有长度大于等于2的回文子串(ss这样的也不行),也就是“严格不回文”,请问这个区间最少的改变次数。当然你不能随便改这个字符,你只能在abc这三个中选一个改。这题实际上也是暴力,但是一看m,n数据范围都不小,我没有办法去完成这件事情,但是观察abc这三个选择倒不算很多,字符串ABCABC(ABC分别代表了不同的单元)就是满足了严格不回文的要求,那么我就原创 2021-08-19 18:40:31 · 104 阅读 · 0 评论 -
CF1509C The Sports Festival(dp+思维)
题目传送门题意给你一个序列,你可以任意交换这个序列的位置,现在让你求出前n个子序列的最大值减去最小值之和的最小值。思路这道题要求前n个子序列的最大值减去最小值最小,那么贪心考虑我们肯定尽量让最小值或者最大值在最后,如果不然,那么我们最大值-最小值(差值最大)的情况将会有两种,因此,将进行区间dp。#include<iostream>#include<algorithm>#define int unsigned long longusing namespace std;原创 2021-08-09 14:46:11 · 217 阅读 · 0 评论 -
CF1451D Integers Have Friends(博弈问题)
题目传送门题意Alice和Bob又来做游戏啦!这次他们做的是,给你一个直径为d的圆,现在有一枚棋子位于(0,0)原点,每一次操作可以把棋子向右或者上方移动一个单位长度,Alice先手,Bob后手,棋子只能位于圆中,不能移动则失败,请输出赢者。思路这道题和在桌面上放硬币的思路非常相似:先手先占据桌子的中心位置,那么后手无论怎么放置,我们的先手都可以按着这个中心对称的位置跟着放就可以了,因此先手必赢。那么按着这个思想。我们现在设xxx是2∗(x∗k)2<=d22*(x*k)^2<=d原创 2021-08-08 23:08:38 · 110 阅读 · 0 评论 -
CF1493D GCD of an Array (分解定理+思维)
题目传送门这道题有一个非常牛逼的数据结构就是multisetmultisetmultiset题意先给你一个序列,然后给你几组询问,询问的第一个数是在第x个位置上,第二个数p代表,在第x个位置上乘p。请找到这个序列的gcd,并输出。思路这道题肯定是让你找到所有数的公共的因子,那么就可以以因子为下标,存到multisetmultisetmultiset里面,同时开一个数组标记一下,这个数作为了几个数的因子。如果能找到这个因子,并这个数已经作为全部的因子,答案乘这个数。#include<iost原创 2021-08-06 18:17:27 · 119 阅读 · 0 评论 -
CF1548C The Three Little Pigs(组合数学+dp)
题目传送门题意这道题实际上就是让求∑i=1nC3∗ix,x\displaystyle\sum_{i=1}^{n}C_{3*i}^x,xi=1∑nC3∗ix,x是我们每次询问的数值,nnn是小猪进场的轮数。思路我们可以定义一个dpdpdp方程,dp[x][m]dp[x][m]dp[x][m]代表∑i=1n−1C3∗i+mx\displaystyle\sum_{i=1}^{n-1}C_{3*i+m}^xi=1∑n−1C3∗i+mx因此,我们可以得到dp[x][0]+dp[x][1]+dp[x]原创 2021-08-03 12:24:53 · 316 阅读 · 0 评论 -
CF1549D Integers Have Friends(st表+二分/双指针)
题目传送门题意这道题让你找一个最长的区间,这个区间里面的每一个数,都要对于m>=2m>=2m>=2同余思路这道题用到一个同余的性质如果 x≡y(modp)x≡y(mod p)x≡y(modp)那么(x−y)(x-y)(x−y)%p=0p=0p=0那么对于一整个区间来说,我们只要满足这个区间的差分数组不互质就可以。因此问题就转换成为了,维护一个差分数组,找到最长的不互质的子序列。因此我们就要用到二分+st表,如果想优化你也可以双指针(100ms的优化)同时这道题用scan原创 2021-08-02 20:45:27 · 547 阅读 · 0 评论 -
CF689D Friends and Subsequences(ST表+二分)
题目传送门题意给定序列 aaa 和序列 bbb,长度均为 nnn。问有多少组 (l,r)(l,r)(l,r),满足 1≤l≤r≤n1\le l\le r\le n1≤l≤r≤n 且maxi=lrai=mini=lrbi\max_{i=l}^r a_i=\min_{i=l}^r b_ii=lmaxrai=i=lminrbi1≤n≤2×1051\le n\le 2\times 10^51≤n≤2×105,∣ai∣,∣bi∣≤109|a_i|,|b_i|\le 10^9∣ai∣,∣bi∣原创 2021-07-30 15:31:17 · 417 阅读 · 0 评论 -
CF475D CGCDSSQ(ST算法+二分)
题目传送门原创 2021-07-30 12:54:19 · 415 阅读 · 1 评论 -
CF1554C Mikasa(思维+贪心)
题目传送门题意现在已知n,mn,mn,m,请求mmm⊕{0,1,....,m0,1,....,m0,1,....,m}的MEXMEXMEX(最小的没有出现过的自然数)思路本题转换为n⊕x=yn⊕x=yn⊕x=y现在已知 0<=x<=m0<=x<=m0<=x<=m,可以将式子转换为n⊕y=xn⊕y=xn⊕y=x现在已知,yyy没有在我们的运算结果这个集合中出现,那么x>mx>mx>m因此n⊕y>=m+1n⊕y>=m+1n⊕y&g原创 2021-07-30 12:41:21 · 284 阅读 · 3 评论 -
CF1547F Array Stabilization (GCD version)(ST算法+数论)
题目传送门思路STSTST算法STSTST算法能在O(nlogn)O(nlogn)O(nlogn)时间处理以后(动态规划思想),然后O(1)O(1)O(1)时间来查询的一种及其高效的做法。最大公约数的一个性质:gcd(i,j,k)=gcd(gcd(i,j),k)gcd(i,j,k)=gcd(gcd(i,j),k)gcd(i,j,k)=gcd(gcd(i,j),k)因此设st[i][j]st[i][j]st[i][j]表示数列中在下标子区间[i,i+2j−1][i,i+2^j-1][i,i+2j−原创 2021-07-28 14:54:25 · 172 阅读 · 2 评论 -
CF1551E Fixed Points (DP)
题目传送门题意在每一组测试中,第一行给你两个数n,k,第二行给你一个大小为n的数组要求你可以删一些数,至少有k个能满足,a[i]=i,请问删除的数最少有几个,如果没有这样的数字,输出-1思路这道题其实很容易能看出来这是一个dp,但是我们应该怎么分析呢?首先对于dp[i][j]代表前i个数,删除第j个了以后有几个满足这样的情况。1.我们这个点不删if(a[i]==i−j)if(a[i]==i-j)if(a[i]==i−j)dp[i][j]=dp[i−1][j]+1dp[i][j]=dp[i-1原创 2021-07-27 10:08:08 · 190 阅读 · 0 评论 -
CF1552D Array Differentiation(思维)
题目传送门思路这个题啊,一看n=10,就知道肯定不用考虑时间复杂度了,应该是一个指数级别的时间复杂度。其实就是我把这个考虑成一个数轴,我可以把aia_iai当成一个两个点之间的距离(负数化成正数,因为距离都是正数)。但是我需要明白的一点就是两个点之间的间隔一定是点数+1,因此我们需要找到这个数轴上的点可以成至少一个环。因此,选择任意一个距离,他们之和如果能在我们新开的一个map上找到重合的部分,那么就说明我们可以找到这个数值,反之就说明我们不能找到这个数值。因此可以用一个爆搜。#pragma原创 2021-07-26 17:18:07 · 289 阅读 · 4 评论 -
CF1221D Make The Fence Great Again(DP)
题目传送门这道题其实也分析出来了,就是dp[n][3]的一个空间,最多修2个单位长度,最少不修,状态转移其实不难,但是这道题做成了dp大讨论(哭)。#include<iostream>#include<cstring>using namespace std;typedef long long ll;ll dp[355555][3];ll a[2102100];ll b[2102100];int main(){ int T; cin>>T; whil原创 2021-07-16 16:20:53 · 122 阅读 · 0 评论 -
CF1550C Manhattan Subarrays(思维)
题目传送门这道题其实是一道思维题,其实题目还是不很难。通过画画图,因为这个序列是有序的下标递增序列,因此下标一定满足|p-r|=|p-q|+|q-r|,因此只需要纵坐标不满足这个性质就行,因此只要这三个纵坐标不满足增函数或者减函数就行。#include<iostream>using namespace std;int a[2102100];int judge(int x,int y,int z){ return (x<=y&&y<=z)||(x>原创 2021-07-16 10:45:08 · 223 阅读 · 0 评论 -
CF438D The Child and Sequence(线段树)
题目传送门和这道题极为相似的还有一道题如下P4145 花神游历各国给出一个长度为 nnn 的序列 aaa ,有 mmm 个操作 (1≤n,m≤105;1≤a[i]≤109)(1 \le n,m \le 10^5;1 \le a[i] \le 10^9)(1≤n,m≤105;1≤a[i]≤109) ,分为以下三种:1 l r1 \ l \ r1 l r:查询序列中区间 [l,r][l,r][l,r] 的和。 (1≤l≤r≤n)(1 \le l \le r原创 2021-07-13 11:00:44 · 129 阅读 · 0 评论 -
AtCoder Beginner Contest 208 E - Digit Products(数位dp)
题目传送门这道题就是一个数位dp,其实也挺容易看出来,但是针对于记搜的过程中1~1e9有点太大了,数组没有办法开到那么大,因此我们需要离散化,map离散化就可以了记忆化搜索那么我们需要记录一下前导0(如果从前面开始一直是0就不会影响最后的每一位的乘数),如果是中间为0的话那么我们这个结果就是0。还要记录一下当前状态的乘数,当然还有搜索到的位数。总体来说是一个比较基础的数位dp,我错的思路在注释里写了。#include<iostream>#include<cstring>原创 2021-07-05 16:11:07 · 532 阅读 · 0 评论 -
CF1542C Strange Function(数论+思维)
题目传送门非常赞的一道数论题~题目大意现在让f(i)为i的最小的非因子。也就是不能整除i的最小正整数。求∑f(i)的值。思路这道题首先想到从1~n去试一试,能不能整除,然后想如何去优化。我们想到了lcmlcm(a1,a2,a3,a4,...an)lcm(a_1,a_2,a_3,a_4,...a_n)lcm(a1,a2,a3,a4,...an)一定能被a1,a2,a3,a4,...ana_1,a_2,a_3,a_4,...a_na1,a2,a3,a4,...an分别整原创 2021-07-05 12:41:30 · 512 阅读 · 16 评论 -
CF1539D PriceFixed(双指针+贪心)
题目传送门大意淦,这题想了半天dp,原创 2021-06-30 17:10:23 · 241 阅读 · 1 评论 -
CF1535C Unstable String(dp)
题目传送门可以说是比较简单的一道dp问题了但是还是没做出来就很菜了。dp[i][j]来存第i个位置对于答案的贡献,状态转移是dp[i][j]=dp[i-1][j1]+1,因为dp[i-1][j1]存的是i-1向前延申最多位所能有的最多的子串。因此加上它本身又来一位的值。因为答案问的是最大值,所以到后面求一个最大值即可。#include<iostream>#include<cstring>using namespace std;int dp[210200][2];cha原创 2021-06-06 23:20:11 · 242 阅读 · 2 评论 -
CF1512G Short Task(数论+dp)
题目传送门等我上完课回来再写题解~#include<iostream>using namespace std;typedef long long ll;const int N=1e7+1000;int primes[N], cnt; // primes[]存储所有素数bool st[N]; // st[x]存储x是否被筛掉ll dp[N];int ans[N];void get_primes(int n){ for (int i = 2; i原创 2021-06-04 13:48:36 · 148 阅读 · 0 评论 -
CF1398C Good Subarrays(思维)
题目传送门思路现在我们可以写一个公式(sum代表前缀和数组)sum[i]−sum[j]=i−jsum[i]-sum[j]=i-jsum[i]−sum[j]=i−j移项可得sum[i]−i=sum[j]−jsum[i]-i=sum[j]-jsum[i]−i=sum[j]−j那么代表这个存在一个这种情况(这个代表一对)那么我们就可以愉快的开始实现我们的代码了#include<iostream>#include<map>using namespace std;type原创 2021-05-31 23:42:45 · 211 阅读 · 0 评论 -
CF1528B Kavi on Pairing Duty(dp)
题目传送门思路这道题真的是一道不太好想的dp…真的太菜了首先状态转移分成两种情况区间长度相等的情况,如这种情况就是看看你现在的区间有几个约数,那么代表有几种这样的situation记为v[i]包含情况,如dp[i]+=dp[i-1]dp[i]+=dp[i-1]这样的就是dp[i]+=dp[i-1]+dp[i-2]当然还有这样的这样的就是,两个区间交替,外层区间谁也没有包谁那么就是dp[i]+=dp[i-2]那么状态转移方程就是dp[i]=dp[i−1]原创 2021-05-31 23:17:34 · 279 阅读 · 1 评论 -
CF1499C Minimum Grid Path(思维+贪心)
题目传送门思路话说这道题我分析出来了一个虚假的贪心:我认为我现在让当前的步数代价走完全程(之前的肯定都只走一步),比较每一个的最小值,如果这个不用两个维度走的话大概率是对的,但是出现了问题在于这是两个维度,每一个维度虽然数值上不相关,但是步数关系上是相关的(比方说,我现在右向我只选了3组数据,但是上向就不能选第6组了(不能跳着选)),那么我们只需要让最小的步数尽量走的更多,每一次都枚举一遍,最后比较一下选最小的就可以了。#include<iostream>#include<map原创 2021-05-31 19:36:47 · 178 阅读 · 0 评论 -
CF1498C Planar Reflections(思维+dp)
题目传送门思路设定dp[i][j]dp[i][j]dp[i][j]代表的是现在有一个以jjj为能级的原子,前面有iii个能级墙,经过这个过程以后能产生的原子。首先dpdpdp问题就应该分析状态,任意一个状态来看,经过一个能级墙所能产生的原子是:1状态上一个和初始状态相同的方向的所经过这里产生的dp[i−1][j]dp[i-1][j]dp[i−1][j]还有一种就是原子分裂产生的新的更弱能级,计算方式就是这个更弱能级产生的其实就是更小的能级j-1,而且这个原子面对的方向和我们初始的方向其实是相反的原创 2021-05-31 19:30:28 · 153 阅读 · 1 评论 -
CF1238C Standard Free2play(dp)
题目传送门题意这道题的题意我感觉还是挺不好理解的意思就是说现在给你一个悬崖,每个样例中第二行输入的数代表这个悬崖突出的部分,你刚好站着这个悬崖的最高层,现在你可以进行如下操作:将本突起位置隐藏,(这样你就掉下去了)但是做出的代价就是让这个位置的紧挨着的下一个位置的状态发生改变(如果你改变了x位置的突出情况,如果x-1位置是突出的,那么它将变成隐藏的,反之就会变成突出的)但是现在有一个问题就是你是绝对不能允许你往下掉两个单位,因为你是bym同学,那样会影响到你的发型,(这样就无法吸引别人追求你),当然你原创 2021-05-30 21:28:29 · 154 阅读 · 0 评论 -
CF1516C Baby Ehab Partitions Again(思维+dp)
题目传送门思路现在分析一下,对所有元素先求一遍和,其结果是奇数,那么代表不用修改任何值(因为奇数你本身就无法做到平均分配),那么这个数组就一定是一个好数组。如果是偶数的话,就需要用到dp,如果dp[sum/2]是真值,那么对整个数组进行遍历,每一次遍历的过程中就是寻找奇数,如果找到了奇数,就代表这个子状态没有办法平均分配这些数字。那么其去掉这个数,对于数组中的任何数据乘上这个相应的倍数都无法做到平均分配,因此输出这个数组的下标即可。#include<iostream>#include&原创 2021-05-30 19:05:09 · 315 阅读 · 0 评论 -
CF1455D Sequence and Swaps(思维+暴力模拟)
题目传送门思路其实这道题就是一个非常常见的模拟题 滑稽(因为我有一个x来替换数组里任意一个元素,因此,数组里面一定会有一个我们要排除掉的元素。那么因为这个数据很小,因此我们就模拟一下哪个元素我们应该抛弃掉。然后用x来替换这个数,然后开心的sort一下,最后和原数组进行对比,模拟一下这个过程,最后判断一下数组是不是和我们排好序的顺序数组相等。#include<iostream>#include<algorithm>using namespace std;int a[2原创 2021-05-30 12:51:48 · 121 阅读 · 1 评论 -
CF1151B Dima and a Bad XOR(思维)
题目传送门题意传送门思路这个题其实刚开始用的爆搜,结果真就爆了,其实很简单,先让这个矩阵的第一列相互异或,如果最后结果不为0那么就直接输出就可以了。如果是0那么就从最后一排开始找,如果结果不为0,那么就直接输出。如果整个矩阵都遍历了一遍还是没找出来,那么就只有一种可能性,就是这个矩阵的每一排的数字都是相等的,那么我们也没有任何找的必要性了,(因为无论怎么找都是0).那么就按照相应的那么输出就可以了#include<iostream>using namespace std;i原创 2021-05-30 11:27:41 · 155 阅读 · 0 评论 -
CF1282B2 K for the Price of One (Hard Version)(dp)
题目传送门题意有n个商品,每个商品价值为 ai 现在有一个活动优惠,买一个物品可以选择k - 1个价值小于等于该它的物品免费获得(要么一个也不选,要么一定要选k - 1个),求k个硬币一共能买多少物品。在该题中k <= n。思路这道题我感觉是一道很巧妙的题首先要明确的一点就是,我要买更多的东西,我现在的钱可以买贵的也可以买便宜的东西,那么我现在优先买什么?(不考虑免费拿的问题)一定先买便宜的,因为,我买了便宜的东西,我可能还有闲钱去买其他便宜的东西,但是我如果先买贵的东西,那么就不一定有闲原创 2021-05-30 11:20:23 · 93 阅读 · 0 评论 -
CF1468F Full Turn(思维)
题目传送门题意思路这个题和今年蓝桥杯的那个填空题很相似(枚举向量,斜率),其实就是构造一个向量,起点是这个人的位置,终点是这个人的朝向,构造出来这个向量,如果找到向量相对的情况那就加起来。为什么要两条向量平行才行?其实就是因为,可以让两个人的起点坐标连线,必须要同时到达这个连线位置才会四目相视,因为这两个人旋转的角速度一定相等,因此,必须平行(根据平行四边形的性质,两个夹角相等)那么因为(有点类似于计算几何的题目)因此最好不要使用double 用pair存一下向量的朝向即可(最好用int)A原创 2021-05-30 11:12:25 · 88 阅读 · 0 评论 -
CF888D Almost Identity Permutations(dp)
题目传送门题意给出n和k计算满足至少有(n-k)个位置的值a[i]==i的1~n的全排列的个数。参考大佬博客思路这道题可以用dp去完成dp[i][j]dp[i][j]dp[i][j]表示序列是以i为长度的,只有j个a[k]=ka[k]=ka[k]=k的排列数那么我们想一下状态转移:dp[i][j]dp[i][j]dp[i][j]可以由dp[i−1][j],dp[i−1][j−1],dp[i−1][j+1]dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1]dp[i−1][原创 2021-05-30 11:05:30 · 127 阅读 · 0 评论 -
CF913C Party Lemonade(贪心+dp)
题目传送门题意这道题类似于一个多重背包问题这道题大致意思就是:输入n,m,n代表有几种柠檬水m代表我现在举办聚会需要几升柠檬水下面的每一个数据代表2i(0<=i<n)2^i(0<=i<n)2i(0<=i<n)升柠檬水需要多少钱最后输出能满足聚会要求的(可以多买)柠檬水最少要多少钱思路这道题有一个非常巧妙的贪心+dp的做法。首先可以用dp的做法求出我们买每一组柠檬水要的最少价格比如,我买1L柠檬水需要1元钱,但是2L一块买就需要4块钱,那么我们可以用状态原创 2021-05-29 17:38:28 · 158 阅读 · 0 评论 -
CF1196D2 RGB Substring (hard version)(dp+前缀和思想)
题目传送门题意这道题的题意大致就是说第一行输入两个数n,k那么第一个数代表这个字符串的长度,第二个k代表这个字符串的子串的长度,而且要求这个字串必须是RGBRGBRGBRGBRGB...RGBRGBRGBRGBRGB...RGBRGBRGBRGBRGB...的一个字串,请问你最少可以修改几个字符,然后让这个字串也是这样的。思路这道题还是一个dp,那么如何去分析这道题呢?首先我们要想到,每一位上的字符都有可能是以R,G,B这三个字母为起点往后延伸k位,考虑动态规划解决本问题,那么就应该这么考虑:原创 2021-05-29 11:53:15 · 80 阅读 · 0 评论 -
CF1395C Boboniu and Bit Operations(线性dp)
题目传送门题意这个题的意思是说给你两个数组a和b,长度分别为n和m,现在你需要找到一个序列c长度为n,ci=aic_i=a_ici=ai & bk(1<=k<=m)b_k(1<=k<=m)bk(1<=k<=m)求出的最小值思路这个题就是dp,但是我个人认为还是不太好想。dp[i][j]=0/1dp[i][j]=0/1dp[i][j]=0/1代表前cic_ici个单位是否存在c1∣c2∣...∣ci=jc_1|c_2|...|c_i=jc1原创 2021-05-29 10:50:32 · 677 阅读 · 0 评论 -
CF1519D Maximum Sum of Products(基础区间dp)
题目传送门题意就是你可以任意reverse一个区间,求出ai∗bia_i*b_iai∗bi的最大值(反转之后的)思路这道题是一个区间dp,首先我们用两个指针来枚举左区间和右区间,然后用子状态(区间dp来分析反转情况)分析出状态转移就是dp[反转之后]=dp[反转之前]+a[i]∗b[j]+a[j]∗b[i]−a[i]∗b[i]−a[j]∗b[j]dp[反转之后]=dp[反转之前]+a[i]*b[j]+a[j]*b[i]-a[i]*b[i]-a[j]*b[j]dp[反转之后]=dp[反转之前]+原创 2021-05-29 09:54:31 · 223 阅读 · 0 评论