
DP
二分抄代码
去了18ec没资格去19ec的反向训练选手
展开
-
C-Cities ICPC昆明现场赛
https://ac.nowcoder.com/acm/contest/12548/C可惜麻将写太久了,可惜了先缩点,让相邻两个都是不同的dp[i][j]表示i,j变成一种颜色的最小操作数是多少,首先min(dp[i+1][j],dp[i][j-1])+1转移过来接下来我们考虑左端点(由于前一种左右能左右转移,所以所有区间都只考虑最左边的节约一次的合并) 是否能由一个相同的转移过来dp[i][j]=min(dp[i][j],dp[i+1][mid-1]+dp[mid][j]+1); ..原创 2021-04-06 01:06:53 · 341 阅读 · 0 评论 -
AtCoder Regular Contest 116 D - I Wanna Win The Game
https://atcoder.jp/contests/arc116/tasks/arc116_ddp[k][i]表示当前已经枚举到2^k了,然后背包容量是i的时候方案数是多少每次枚举当前2^k放多少个去填,因为要是异或=0,所以必须偶数个,然后方案数就是n个里面选t个位置放下这些2^k,就是C(n,t)k=logm i=m t=m/2^k ,所以复杂度是O((n+m)log^2m) ,感觉n,m=2e4也能过啊#include<bits/stdc++.h>using na.原创 2021-03-31 23:45:21 · 195 阅读 · 2 评论 -
codeforces1458B. Glass Half Spilled
https://codeforces.com/contest/1458/problem/B经典dp循环边界出问题,A题不会做,B题卡一整场,C题没几个人过也不想看初步观察有个很显然的想法,假设我们二分答案,首先选出来的k个瓶子总容量需要大于这个答案,然后由于其他的瓶子倒过来有损耗,那么我们肯定是优先选剩余水量多的不损耗,水量少的让他倒过来损耗那么很显然就有个DP,dp[k][j]表示用k个瓶子,上限是j的时候,这k个瓶子的最大已有水量是多少那么最后求答案的时候就是遍历所有的j,ans=max原创 2021-03-01 21:20:11 · 217 阅读 · 0 评论 -
AtCoder Grand Contest 009 C - Division into Two
https://atcoder.jp/contests/agc009/tasks/agc009_c感觉这种题遇到过,就是一堆数字放两个集合,有多少种方法让集合内的差值都大于某个一个固定值一直都不会做,今天又见到了,但之前遇到的好像是两个集合相同的版本,这个是两个集合不同的固定值,所以两个集合本身也是不同的,也就是 {1},{}和{},{1}是有区别的不妨设A<=B设f[i]为前i个划分,s[i]在B集合的方案数假设f[i]可以由f[j]转移过来,也就是B集合中倒数两个数是s[],s原创 2020-12-08 21:39:29 · 177 阅读 · 0 评论 -
gym102441A Template for Search
https://codeforces.com/gym/102441/problem/Adp[i][j]表示i到j的模板形成一个回文串的最小长度,dp[i][j]=-1表示无法形成回文串如果s[i],s[j]可以配对,那么可以从dp[i+1][j-1]转移而来如果s[i]=='*',那么这个*可以复制[i+1,j]的一个后缀,由dp[i+1][k-1]转移而来s[j]=='*'同理记录一下转移,然后最后dfs去构造可行解#include<bits/stdc++.h>us原创 2020-12-06 01:51:10 · 305 阅读 · 0 评论 -
AtCoder Regular Contest 109 C - Large RPS Tournament
https://atcoder.jp/contests/arc109/tasks/arc109_c设dp[i][k]为以s中的第i个字母开头,要连续2^k的答案然后就好转移了,预处理出2次幂%n,然后左半部分就是dp[i][k-1],右半部分的开头就是i+2^(k-1)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxl=3e5+10;int n,m,k,cnt,to原创 2020-11-29 01:05:17 · 547 阅读 · 0 评论 -
AtCoder Grand Contest 005 D - K Perm Counting
AtCoder Grand Contest 005 D - ~K Perm Countinghttps://atcoder.jp/contests/agc005/tasks/agc005_d首先想到如何去容斥,假设任意钦定i个非法点的选择方案是dp[i]那么 ans=∑i=0n(−1)n∗dp[i]∗fac[i]\sum_{i=0}^{n}(-1)^n*dp[i]*fac[i]∑i=0n(−1)n∗dp[i]∗fac[i]然后我们考虑如何去求出这个dp[i]我们可以通过列出二分图来分析,第i个点原创 2020-11-16 22:09:19 · 145 阅读 · 0 评论 -
J - Abstract Painting 2020CCPC长春
这个模型太常见了,看到n=1000就知道往哪个方向做了这场这道银到金难度的思维题是我会做的,因为区间dp积累比较厚,但换一个模型以后就不知道会不会了,重现赛开始一个多小时才开始打4个小时场,Lwa到结束,不知道最后能不能过,我是真的没点思路,思维题还是得练。H二分图博弈也没见过,hls现场直接过了牛逼这题就是dp[i][j][0]表示这段区间随便放但(i-j)不存在一个圆有多少方案,dp[i][j][1]表示存在一个圆有多少方案,可知当可以在外面套个大圆的时候也就是(j-i)<=10且偶数原创 2020-11-08 22:20:17 · 476 阅读 · 1 评论 -
hdu6854 Kcats 2020hdu多校7
http://acm.hdu.edu.cn/showproblem.php?pid=6854好DP原创 2020-10-15 01:04:56 · 357 阅读 · 0 评论 -
ARC104 D Multiset Mean
https://atcoder.jp/contests/arc104/tasks/arc104_dARC也太自闭了。。。完全不适合我这种只会模拟的而且模拟也写不好的低智选手,10分钟签完AB一看C也不会D也不会。。。D需要一个牛逼的转化,我们最后的目标均值是x其实就是最后选出a集合中的元素要满足sum{ai-x}=0,所以其实每个数字就可以变成-1,-2,...-(x-1),和+1,+2,...+N-x我们发现由于每个数字可以选的数量都是一样的,所以把-1,-2...-(x-1)变成+1,+2,原创 2020-10-04 01:28:32 · 494 阅读 · 0 评论 -
codeforces1409F Subsequences of Length Two
https://codeforces.com/contest/1409/problem/F艹怎么这题过了500多个人我不会做啊,写了个100多行的n^3贪心预处理然后n^3dp一直在wa最后其实设dp[i][j][k]为前i个位置,用了j次修改,有k个t[0]的最多对数,这样状态就非常好转移了如果s[i+1]==t[0],那么要么维持他是t[0],要么吧他变成t[1]如果s[i+1]==t[1],要么维持他是t[1],要么变成t[0]否则,要么维持都不是,要么变t[0],要么变t[1]原创 2020-09-05 01:58:27 · 450 阅读 · 0 评论 -
codeforces1400E Clear the Multiset
https://codeforces.com/contest/1400/problem/E据说是群友前几天才做到的腾讯笔试原题?还是抄的以前cf的原题?https://codeforces.com/problemset/problem/448/Csb题目又想了一年,某bhu牛逼网友14分钟过了,基础dp功力还是不够。。。设f[i]为i是用2操作单选过来的,前i个拿完的最优值,g[i]为i是用1操作从之前某个地方延续过来的,前i个拿完的最优值f[i]=min(f[i-1],g[-1])+(原创 2020-08-26 00:35:41 · 327 阅读 · 0 评论 -
codeforces1393D Rarity and New Dress
https://codeforces.com/contest/1393/problem/D先每一列从上往下扫再从下往上扫,得到每个位置向下最远多少,向上最远多少,然后取min得到他在竖直方向最大多少然后每一行从左往右扫再从右往左扫,由于他的形状特性,那么当前位置可最多拓展的图形个数就是min(l[i][j-1]+1,h[i][j],r[i][j+1]+1)#include<bits/stdc++.h>using namespace std;typedef long long l原创 2020-08-08 00:44:47 · 248 阅读 · 0 评论 -
codeforces1399F Yet Another Segments Subset
https://codeforces.com/contest/1399/problem/F就我们只要考虑怎么嵌套就行了,求出f[i]为第i个区间内部加本身能放下满足要求的区间总数,最后增加一个mini-max的区间,就把整个问题转换成了这整个嵌套最多能多少。肯定是把长度小的套进长度大的,所以我们先把所有区间按长度排个序然后把被当前要计算f[i]的区间包含的所有区间拿出来对右端点排序,也可以直接丢进右端点下标的vector里面然后从左到右扫这个区间,最多可以放多少个不相交的区间,但区间的值要改原创 2020-08-06 00:50:14 · 564 阅读 · 0 评论 -
A Portal 2020牛客暑期多校训练营(第五场)
https://ac.nowcoder.com/acm/contest/5670/A把一个任务分为两个任务,先到ai再到bi设dp[i][u]为完成了i任务后,在u位置放了一个传送门的最小距离那么有dp[i+1]四种转移方法,直接由a[i]走到a[i+1],由a[i]瞬移到u再走到a[i+1],先走到v然后瞬移回u再走到a[i+1]并把传送门放在v,由a[i]传送到u然后走到v再走到a[i+1]。#include<bits/stdc++.h>using namespace s原创 2020-07-28 02:13:13 · 263 阅读 · 0 评论 -
hdu6787 1005-Chess 2020 年百度之星·程序设计大赛 - 初赛三
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=891&pid=1005设f[i][j],为可以恰好踩到到第j个位置,前面已经放了i个传送门的方案数那么我们可以枚举j位置上一个可以恰好踩到的位置j-k,其中j-k+1到j-1是放满了传送门的,所以这些位置时不可以踩到的,只能踩到j-k,那么这些放传送门的地方传送到哪里都是无所谓的,方案数就是一个连乘那么只要由f[i-(k-1)][j-k]转移到f[i][j]原创 2020-07-26 17:03:37 · 455 阅读 · 5 评论 -
codeforces1353E K-periodic Garland
https://codeforces.com/problemset/problem/1353/E首先下标对k取模,模数一样的吧i/k放进vector数组a[i%k]中我们最后的答案肯定是只选择某一个i(0<=i<k)这个相位,然后取中间的一段,使得答案最小由于存入的数字是i/k,那么最后的状态需要间隔为k,意思就是最后取的这段坐标的i/k是连续的我们现在开始枚举一个相位 d,然后他中间为点亮的灯的坐标所在的块数为b[1],b[2],b[len]那么,1的总数为sum,如果我们原创 2020-05-15 00:54:53 · 341 阅读 · 0 评论 -
codeforces1348E Phoenix and Berries
https://codeforces.com/contest/1348/problem/E2400分的DP还是不会做。。。还是看了题解关键思路在想到dp[i][j]表示前i个,多出 j 个红色,进而可以直接算出多出o=sumab[i]-dp[i][j]*k-j个蓝色感觉是个比较常见的状态设计套路,然而没想起来,就是存一个状态,另一个状态可以直接算出来其实这题是因为下限是suma/k...原创 2020-05-04 22:13:24 · 405 阅读 · 0 评论 -
gym100543E Can't stop playing CERC2014
https://codeforces.com/gym/100543虽然知道大概是DP,然而我写的假DP又T又WA又RE对着官网上下载的标程思考了好久,太神了,当年在楼教主的采访里看到评价波兰选手思维优美,这么神的DP现场能过25个队。。都不像那种数位DP,wqs二分,决策单调性优化等,有时候是讨论情况麻烦,或者说是套路,然而这题是纯巧妙很显然我们知道在一维版2048合并的过程中,必...原创 2020-05-04 18:02:48 · 448 阅读 · 0 评论 -
codeforces 1312E. Array Shrinking
https://codeforces.com/problemset/problem/1312/E傻逼DP又写了快40分钟,迟早药丸这题之前总是按传统的区间dp想维护i,j的最多合并次数,怎么维护左右是否能合并去了然而事实上是要想到一个结论,那就是如果一个区间可以合并成一个数字,那么这个数字是定值,然后这个东西可以预处理那么就维护num[i][j]=k表示i,j合并以后能得到一个k,...原创 2020-03-10 15:07:30 · 602 阅读 · 0 评论 -
codeforces1303E Erase Subsequences
https://codeforces.com/problemset/problem/1303/E枚举断点,然后dp[i][j]表示用s串的前i位,已经匹配了t串的前j位,断点后的第二段可以匹配多少#include<bits/stdc++.h>using namespace std;const int maxl=410;int ans,slen,tlen;int a...原创 2020-02-13 16:33:17 · 238 阅读 · 0 评论 -
codeforces1292C Xenon‘s Attack on the Gangs
https://codeforces.com/problemset/status这题一开始想着dfs贪心贪了好久,后来发现如果出现贡献相等的情况,不知道取那边扩展。花了很多时间才想出来,打cf的时候基本没可能写完。后来看见tag DP才突然想到。。。这题跟ccpc2019网络赛那个第K长的路径还挺像的。在图上(树上)的DP,有时候不好让坐标连续,就不好用数组连续下标表示转移(a(i-1,j...原创 2020-02-06 00:50:26 · 174 阅读 · 0 评论 -
CH5104 I-country
https://ac.nowcoder.com/acm/contest/1041/F这题早就想出来了,然而一直没写掉,感觉对恶心的分情况题有一种畏惧感,好久没写这样的题了,我已经不再是去年的模拟王者了,以后还是要勤加练习。。。周六下午就欠着的题,周日体侧+实验报告,周一生病到周三。。。很显然凸多边形就是从上向下的方向上,左边界先向左再向右,右边界先向右再向左那么就很显然可以设出基本...原创 2019-11-07 20:41:31 · 339 阅读 · 0 评论 -
CH5103 传纸条
https://ac.nowcoder.com/acm/contest/1041/E以前从一本通上学的传纸条只会n*m*n*m的这里又是因为如果我们设走的步数为k,那么只要知道一个点的x坐标,y坐标也能算出来,所以就可以省去一维。WA了一发,注意x坐标 要<=min(k+1,n),因为k步最多走到(k+1,1)#include<bits/stdc++.h>#d...原创 2019-11-01 17:39:49 · 312 阅读 · 0 评论 -
CH5102 Mobile Service
https://ac.nowcoder.com/acm/contest/1041/D这题的关键在于对于第i步来说,一定是有一个点在p[i]的,所以这一维可以优化掉而对于优化掉一维的这种DP来说,由i推向i+1更加简单,由i-1转移到i不好转移。。。。#include<bits/stdc++.h>#define maxl 1010using namespace s...原创 2019-11-01 15:50:32 · 175 阅读 · 0 评论 -
codeforces714E Sonya and Problem Wihtout a Legend
https://codeforces.com/problemset/problem/714/E跟poj3666差不多https://blog.youkuaiyun.com/liufengwei1/article/details/102844609不过这里是要求B数列是严格上升子序列我们可以构造a[i]=a[i]-i,这样就保证了A序列至少相差了1,那么最后只要求对于新的A序列的构造不严格上升子...原创 2019-10-31 21:17:37 · 138 阅读 · 0 评论 -
poj3666 Making the Grade
http://poj.org/problem?id=3666算法竞赛进阶指南一眼看过去全是不会做的题。。。这题要用数学归纳法证明B的最优构造方案一定包含一种只用A中出现过的数字的情况,但我觉得我肯定想不到然后就比较简单了,考虑B不下降的情况,f[i][j]表示前i个用A中的前j个数字,第i个恰好用第j这个数字的最小值那么f[i][j]=min(f[i-1][k]+abs(a[i]-...原创 2019-10-31 20:01:02 · 159 阅读 · 0 评论 -
算法竞赛进阶指南线性DP LCIS
https://ac.nowcoder.com/acm/contest/1041/B发现水题好像不太会。。。。得补下基础了这题要联想到LIS是以一个数字为结尾最长的状态,再联想到LCS时以s串的前i个字母和t串的前j个字母的最大公共子序列的状态。于是设出f[i][j]表示A的前i个数字和以B[j]为结尾的最长上升的长度,那么就很好转移了,如果a[i]==b[j],那么f[i][j]...原创 2019-10-30 22:10:19 · 166 阅读 · 0 评论 -
2019牛客多校第三场 I Median
题意:输入b[3]...b[n],表示n,n-1,n-2位置的中位数,求构造一个序列。题解给出一个结论是如果有解,那么a[i]必可以是可以受他影响的三个中位数中的一个。反证法:如果a[i]不是这三个中的其中一个,简单分析可知,必然有a[i] 大于这三个的最大值或者小于他们的最小值,那么显然把这个值调为最大值或者最小值,不会影响三个中位数。这样很有道理,就可以DP了,令影响a[i]的三个数字...原创 2019-07-26 15:49:32 · 470 阅读 · 0 评论 -
codeforces 1198D Rectangle Painting 1
比赛中写了个假贪心,赛后发现就是个经典的平面区域(棋盘)DPf[x1][y1][x2][y2]为把这一块变白的最小代价,如果他就是全白的,那么为0,如果只有一个点,那么直接判断然后返回使用记忆化搜索的形式DP,对于每一次,有一种方案是直接把这一片区域全染白,那么代价是max(y2-y1+1,x2-x1+1)。另一种方案是把这片区域分成两半然后递归下去找这两半的最小答案加起来。#i...原创 2019-07-31 10:41:20 · 765 阅读 · 0 评论 -
2019国防科大校赛 E Missile
https://ac.nowcoder.com/acm/contest/878/E挺好的一道分组背包byf跟我讲了以后我还以为是求一个期望然后得到他的代价,也就是必须要击落才能获得他的价值。(沟通还是有问题,我也总是想当然)然而这题给了一个计算的公式,发射 Tij 枚 i 号导弹的时候有一个击中的概率Pij,而此时的价值是(Pij*W[i])四舍五入byf的一句话提醒了我,发射一枚...原创 2019-05-10 11:13:26 · 447 阅读 · 0 评论 -
codeforces 1155D Beautiful Array
hls J 了我一手,我还是写错,菜枯.jpg ,眼看小号就要追上大号了,突然2场掉了120分。。。x是正数的话,我们直接就求最大子区间和乘以x,x<=0的话,可以知道我们如果选择[j,i]乘以x,那么最大值就是[j,i]*x+i右边能拓展出的最大区间和+j左边能拓展出的最大区间和,我们设f1mx[j]表示以j结尾的能向左拓展出的最大区间和,f2mx[i]表示以i开头能向右拓展出的最...原创 2019-04-24 00:01:23 · 479 阅读 · 0 评论 -
codeforces 1149B Three Religions
http://codeforces.com/problemset/problem/1149/Bdp[i]][j][k]表示第一个串前i位第二个串前j位....能由word of universe 的最短的多少位形成。然后 - 操作,就全部情况赋值为n+1,+操作,就全部更新一遍[i][j][len[3]+1]需要去全部得到,那么就i=0-》len[1],j=0->len[2]这样去...原创 2019-05-02 14:37:24 · 235 阅读 · 0 评论 -
POJ - 1160
设f[i][j]为前i个邮局放前j个村庄,第i个恰好放第j个的情况那么f[i][j]=min(f[i-1][k]+cost(k+1,j-1));而我们要确定中间那个到2边哪个更近的分界点有点困难,也就是处理出这个转移的cost有点困难我们设x为第一个离j最近或者离jk一样近的村庄则a[j]-a[x]即a[x]>(a[j]+a[k])/2 考虑到小数问题,用upper_bound就可原创 2018-01-31 20:12:38 · 255 阅读 · 0 评论 -
Gym101981B Tournament 2018icpc南京B题 wqs二分+决策单调性
传送门:http://codeforces.com/gym/101981查题解看到这题有个wqs二分,去学习了一蛤,做了道板题,再来看这题发现还不够,于是对着代码理解了好久的决策单调性。18年寒假我做过一道一模一样的题POJ1160,没想到南京这场竟然有原题,不过那个是O(n^3)过的,这个是O(nlognlogn)才能过。首先如果要直接DP的话,我们需要设f[i][j]表示前i个地方...原创 2019-08-04 22:35:38 · 672 阅读 · 0 评论 -
codeforces1197E Culture Code
这场一开始没报名,10多分钟才交AB,然后C题WA到1个小时才靠lts和hkt告诉我二分每一段的最大差值是个假做法,然后队友在群里面@我说你怎么2300名了。。。还好D题很水秒掉了,大概只要下一点分,E题当时考场上已经写得差不多了,结果调了一上午才过。。。先把端点离散化,按照左端点第一关键,右端点第二关键字从小到大排序。f[i]表示恰好out到 i 的最小代价;我们可以知道新加一个套娃的新...原创 2019-07-23 13:10:06 · 333 阅读 · 0 评论 -
2019牛客多校第四场 A meeting
考场上写了一大坨树形DP,写的时候就感觉我这不是跟求树的最长链写的一毛一样然后考后看题解,果然是k个ren所连成的子树的最长链的一半可以利用反证法证明,如果在长度为d的最长链的中间放一个中心,如果有另外一个点到这个点的长度>(d+1)/2,那么这个点到对面的那个点的长度大于d,所以不存在这样一个点。#include<bits/stdc++.h>#define ma...原创 2019-07-27 21:20:10 · 513 阅读 · 0 评论 -
bzoj5311 贞鱼 codeforces321ECiel and Gondolas wqs二分+决策单调性优化
传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5311 竟然照搬cf原题。。。http://codeforces.com/problemset/problem/321/E 原来div1 E题也有简单题。。。究极卡常题,加了fread还跑了2600ms,O(nlogVlogn)的复杂度比读入和预处理还低,估计大部分时间都花在...原创 2019-08-07 10:52:03 · 200 阅读 · 2 评论 -
hdu6638 Snowy Smile 2019杭电多校第6场
离散化x,y坐标,就变成一个矩阵求最大子矩阵和的问题子问题就是个动态维护区间最大子段和线段树每个节点记录4个值,sum为区间和,lrmx为区间最大子段和,lmx从l开始向右的最大子段和,rmx从r开始向左的最大字段和这4个值就可以每次pushup了。然后枚举上边界和下边界,每次下边界+1就把这一行的不为0的点更新到线段树中,由于只有n个点,那么下边界一直移到最后,线段树也最多只会更...原创 2019-08-07 17:04:09 · 314 阅读 · 0 评论 -
2019上海网络赛 J stone game
https://nanti.jisuanke.com/t/41420遇见一道有趣的背包题我们从大到小枚举,为了避免重复,我们需要将当前枚举到的a[i]设为必选,大于a[i]的为可选可不选,小于a[i]的不能选,然后看这时的方案数是多少。由于要满足1号2号条件,我们已经知道了我当前的石头最小重量为a[i],那么可以计算出 s' 集合的重量下界和上界,那么我们用01背包的方式统计方案数,当枚举...原创 2019-09-16 08:28:59 · 461 阅读 · 0 评论