dp
7frog7
这个作者很懒,什么都没留下…
展开
-
CF540D. Bad Luck Island
非常明显的概率dp唯一要注意的就是n个里遇到m种类不是单纯的个数(m)/n信心题//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int原创 2021-11-06 22:21:03 · 117 阅读 · 0 评论 -
1572A.Book
有点拓扑排序的感觉 用bfs来解决dp[j] = dp[i] + (i>j) j是i的子节点值得注意的是应该以最后合法到达某点的状态为准,而不是以它进入队列时为准。也就是允许在进入队列前转移状态 取最大值。//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#de原创 2021-10-28 11:47:43 · 138 阅读 · 0 评论 -
1582C. Grandma Capa Knits a Scarf
本来简单的双指针 结果写成个十分笨重的dfs 本以为要fst了 结果还过了hhh//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i原创 2021-10-24 21:10:47 · 190 阅读 · 0 评论 -
CF811C. Vladik and Memorable Trip
读错题hhh 考虑了半天奇偶性其实不难 n^2也能轻松通过的问题要注意检验合法性//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int原创 2021-10-24 15:35:40 · 91 阅读 · 0 评论 -
CF1551E. Fixed Points
比较naive的dp~设dp[i][j] 为前i个删除j个的时满足条件的数字个数当数字个数大于k时 选出对应的j的最小值//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#defin原创 2021-10-23 14:49:09 · 91 阅读 · 0 评论 -
CF1458B. Glass Half Spilled
很有趣的题 因为在前x个 选取y个 可用空间为z时 必然存在最优解因为是一步步向前的 第一维可以处理成滚动数组如果认为水的总量为S 选取k个杯子最多水量为V那么能得到的最大值就是 (S-V)/2+V=(S+V)/2在最后要比较j和最大值的大小似乎是一道思路清晰就很好写的题却从上午debug到下午万万没想到是因为没限制好只能从 0 0 0 出发有点生锈了啊 (叹息//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx原创 2021-10-22 20:09:14 · 93 阅读 · 0 评论 -
1082E. Increasing Frequency
记录左边更优方案的方法很有趣一开始没想出来//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i=n;i>=a;i--)#d原创 2021-10-19 12:28:20 · 75 阅读 · 0 评论 -
CF1077F1.Pictures with Kittens (easy version)
比较好想的dp 注意限制不合法情况的转移//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i=n;i>=a;i--)#def原创 2021-10-19 11:22:58 · 69 阅读 · 0 评论 -
P1833 樱花
先把一整块拆成若干个二进制的单位再进行01背包//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i=n;i>=a;i--)原创 2021-07-07 14:34:45 · 75 阅读 · 0 评论 -
1538G. Gift Set
首先令a<b设某次要取出t组为什么要变换成相减的形式?emm 窝也不知道 再看看 说不定哪天就知道了(//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define p原创 2021-07-03 16:28:09 · 155 阅读 · 0 评论 -
牛客11175B-音乐家的曲调
是个dpdp[i][j] 代表第j次取到右端点是i的情况时长度的最大值转移方程dp[i][j]=max(dp[i][j],dp[i-1][j]) 传递最大值如果合法左端点是lldp[i][j]=max(dp[i][j],dp[ll-1][j-1]+(i-ll+1))就求出右端点是n时的最大值了//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unr原创 2021-07-03 16:07:22 · 79 阅读 · 0 评论 -
P1879 [USACO06NOV]Corn Fields G
状压dpdp[i][j]表示第i行位j状态时方法总数因为是求全部的摆放方法 所以要求出最后一行的所有状态的方法和//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define p原创 2021-06-04 14:24:53 · 56 阅读 · 0 评论 -
P3694邦邦的大合唱站队
状压dppref[i][j]代表前i个元素中j颜色的总数cnt[i]代表i颜色的总数cond[i] 表示情况i时排列完成时有序元素的数量如果要把l,r范围内的人变为同一个乐队j的,至少需要让(r-l)-(pref[r][j]-pref[l][j])个人移动位置(可以把r-l认为是要整理成相同颜色的元素数量,后者是可以不做处理的元素数量)可以得到递推式:当i在第j位为1时:dp[i]=min(dp[i],dp[i^(1<<(j-1))]+r-l-pref[r][j]+pref[l][j原创 2021-06-02 20:57:23 · 120 阅读 · 0 评论 -
1529C. Parsa‘s Humongous Tree
树dp太久不做了,纠结于细节很久,到最后才写好 结果没时间交了 崩溃//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i=n;i原创 2021-05-25 01:01:03 · 224 阅读 · 1 评论 -
1525D. Armchairs
传送门明显是一道dp设dp[i][j] 第i个1 第j个0时 需要付出的最小代价可以找到递推式dp[i][j]=min(dp[i][j-1],dp[i-1][j-1]+abs(one[i]-zero[j]));如果cntp是1的个数cnt是0的个数最后的答案就是dp[cntp][cnt](比赛时一直在想类似区间dp的写法 应该是漏掉状态了)//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pra原创 2021-05-16 18:25:28 · 222 阅读 · 2 评论 -
102135C. Good subset
最多1e5次询问 上限大概1e8次,还比较安全//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i=n;i>=a;i--)原创 2021-05-04 23:05:38 · 172 阅读 · 0 评论 -
1016C. Vasya And The Mushrooms
可以知道有两种走法 一种是蛇形上下移动 另一种是直接移动到底再转回来那么可以先处理三种走法(走到底的情况分为从上开始和从下开始)在每个点的值,再加起来找出最大值很有趣的是:走到底的情况要走的相对顺序是一样的,所以只要补充前面蛇形运动多出来几步的部分就可以了//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<原创 2021-04-29 16:09:57 · 97 阅读 · 0 评论 -
1517D. Explorer Space
奇数次时显然不可能回到原来的位置偶数时就是求一半路程的最距离*2dp[i][j][k] 代表第k次运动在i,j位置时的最短距离一共有上下左右4种方向写转移式时千万注意是 i-1到i 或者 j-1到j 不要写反/写混//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>原创 2021-04-26 21:20:18 · 125 阅读 · 0 评论 -
1353E. K-periodic Garland
dp[i][0]表示这位填0是合法情况需要的步骤数dp[i][1]表示这位填1是合法情况需要的步骤数填0时上一位合法就可以填1时min(1,i-k)位合法,改变中间的1 或者 将前面的1全改成0//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep原创 2021-04-26 21:14:42 · 65 阅读 · 0 评论 -
607B. Zuma
区间dp形成了回文串的话就可以一次消去dp[i][j]代表从i到j的最小代价应当令每个dp[i][j]=1若a[i]=a[i+1]则dp[i][i+1]=1( 一次消去)否则 dp[i][i+1]=2 ( 2次消去)状态转移:如果a[i]=a[i+pace] dp[i][i+pace]=dp[i+1][i+pace-1]对于j∈[i,i+pace)范围的每个点dp[i][i+pace]=min(dp[i][i+pace],dp[i][j]+dp[j+1][i+pace])//cyc#p原创 2021-04-17 17:31:14 · 124 阅读 · 0 评论 -
1509C. The Sports Festival
区间dp和607B[题目]很相似从一个点开始向左右dp,pace代表长度,每一步选出上两个可能状态中更小的一个加上(最大值-最小值)//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)原创 2021-04-17 17:23:52 · 356 阅读 · 1 评论 -
835D. Palindromic characteristics
dp[i][j]表示[i,j]范围是不是个回文串f[i][j]表示回文串[i,j]的回文串级数(k)把ans倒着加一次就是想要的答案转移方程:dp[i][j]=((dp[i+1][j-1])&&(s1[i]==s1[j]));f[i][j]=f[i][(i+j-1)/2]+1; (当[i,j]是回文串时)//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optim原创 2021-04-16 15:43:10 · 78 阅读 · 0 评论 -
1384B1. Koa and the Beach (Easy Version)
思路很直接的一道dpdp[ i ][ j ] 表示在j时间 j%(2*k)是否可以合法在i位置上转移方程dp[i][j]|=dp[i-1][j-1];dp[i][j]|=dp[i][j-1];要注意边界位置的处理//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>原创 2021-04-16 14:39:33 · 94 阅读 · 0 评论 -
362C. Insertion Sort
给出一个从0-n-1不重复的数列,可以置换一次任意两个元素的位置,求交换后逆序对最少的数量以及这样做的方法有几种large[i][j] 表示从i到j范围内a[i]<a[j]的数量small[i][j] 表示从i到j范围内a[i]>a[j]的数量这两个数组的i与j的关系可以(i<j)也可以(i>j)因为n足够小,可以n^2枚举先统计不置换时的数量如果(a[ i ]<a[ j ])置换i和j减少了small[ i ][ j ]+large[ j ][ i ] 个重复原创 2021-04-15 20:28:17 · 122 阅读 · 0 评论 -
1513C. Add One
通过推导不难发现,所有位数+1时只有9可以增长整个串的长度。每个数字的状态其实是相对独立的,不需要作为整体考虑如果根据输入来确定原状态再做dp,很难不TLEdp[i][j] 代表数字j做i次操作后一共有多少位倒着dp,可以得到转移方程if j==9 dp[i][j]=dp[i-1][1]+dp[i-1][0]else dp[i][j]=dp[i-1][j+1]初始状态应该设置成dp[0][j]=1,因为做0次操作就是0位//cyc#pragma GCC optimize("Of原创 2021-04-12 14:36:04 · 228 阅读 · 0 评论 -
546D. Soldier and Number Game
有点像素数筛的写法 每个数的值等于它的质因数的值的和,若i=j*j时,i的值应该计算两次j//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(原创 2021-04-10 17:48:00 · 82 阅读 · 0 评论 -
883I.Photo Processing
二分答案 要用dp处理分组dp[j] 代表从1到j是否可以合法分组//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i=n;i&g原创 2021-04-06 20:56:09 · 133 阅读 · 0 评论 -
864E. Fire
time limit per test2 seconds memory limit per test256 megabytesinputstandard input outputstandard output Polycarp is in reallyserious trouble — his house is on fire! It’s time to save the mostvaluable items. Polycarp estimated that it would take ti sec.原创 2021-04-06 20:44:29 · 67 阅读 · 0 评论 -
1499D. The Number of Pairs
time limit per test2 seconds memory limit per test512 megabytesinputstandard input outputstandard output You are given three positive(greater than zero) integers c, d and x.You have to find the number of pairs of positive integers (a,b) suchthat equal.原创 2021-04-03 14:39:42 · 198 阅读 · 0 评论 -
1226E. Yet Another Division Into Teams
time limit per test2 seconds memory limit per test256 megabytesinputstandard input outputstandard output There are n students at youruniversity. The programming skill of the i-th student is ai. As acoach, you want to divide them into teams to prepare t.原创 2021-04-02 17:44:21 · 79 阅读 · 0 评论 -
1067A. Array Without Local Maximums
//cyc#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>#define vector<int> VI#define rep(i,a,n) for(int i=a;i<=n;i++)#define per(i,a,n) for(int i=n;i>=a;i原创 2021-04-01 14:38:57 · 95 阅读 · 0 评论 -
1091D. New Year and the Permutation Concatenation
time limit per test2 seconds memory limit per test256 megabytesinputstandard input outputstandard output Let n be an integer.Consider all permutations on integers 1 to n in lexicographic order,and concatenate them into one big sequence p. For example, .原创 2021-03-31 16:52:29 · 136 阅读 · 0 评论 -
1498C. Planar Reflections
C. Planar Reflections time limit per test1 second memory limit pertest256 megabytes inputstandard input outputstandard output Gauranghas grown up in a mystical universe. He is faced by n consecutive 2Dplanes. He shoots a particle of decay age k at the .原创 2021-03-30 21:38:29 · 269 阅读 · 2 评论 -
F. Maximum White Subtree
F. Maximum White Subtree time limit per test2 seconds memory limit pertest256 megabytes inputstandard input outputstandard output You aregiven a tree consisting of n vertices. A tree is a connectedundirected graph with n−1 edges. Each vertex v of this .原创 2021-03-29 20:33:09 · 93 阅读 · 0 评论 -
C. Hills
time limit per test1 second memory limit per test512 megabytesinputstandard input outputstandard output Welcome to Innopolis city.Throughout the whole year, Innopolis citizens suffer from everlastingcity construction.From the window in your room, you .原创 2021-03-26 21:31:36 · 200 阅读 · 0 评论 -
D. TediousLee
time limit per test2 seconds memory limit per test256 megabytesinputstandard input outputstandard output Lee tried so hard to make agood div.2 D problem to balance his recent contest, but it stilldoesn’t feel good at all. Lee invented it so tediously s.原创 2021-03-25 22:22:23 · 140 阅读 · 0 评论 -
codeforces1446B. Catching Cheaters
time limit per test1 second memory limit per test256 megabytesinputstandard input outputstandard output You are given two strings Aand B representing essays of two students who are suspected cheaters.For any two strings C, D we define their similarity .原创 2020-11-17 20:03:44 · 168 阅读 · 0 评论 -
Codeforces 264B. Good Sequences
题意:称递增的且相邻数不互质的数列为好数列,给出一个数列,求出最长的好数列子列长度例如 [2 4 6 9] [2 6 10 15 21] …etc思路:建立一个二维数组,维护每个数的因子和它自己,然后遍历数列中每个数字,并且更新每个因子目前的最长值,每步都更新一次最大值作为答案#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#in原创 2020-11-05 16:00:45 · 180 阅读 · 0 评论 -
codeforces255C.Almost Arithmetical Progression
题意:求出最长的i j i j i…j(i) 序列的长度思路:先把各个数字离散化成1-n的形式,可以减少内存的使用,方便动态规划处理,然后用 dp[i][j] 表示最后两位为i j 的最大长度#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unroll-loops")#include<bits/stdc++.h>using namespace std;原创 2020-11-04 22:14:16 · 120 阅读 · 0 评论