
DP
文章平均质量分 61
orz11111111
这个作者很懒,什么都没留下…
展开
-
Atcoder 400 Number Of Amidakuji 思维,DP
题意:m根柱子平行摆放,间距为1,每根柱子的高度都为n+1. 可以在两根柱子之间的某个刻度[1,2....n]上连接一条线(不能斜着,并且每一条连接的线都没有共同的端点)起点为(1,1) 每次往下走,只到遇到直线 则朝该条直线的方向上走.1<=n<=100. 1<=m<=8. 给出k,问有多少种连续方案使得能从起点走到(n+1,k). 因为每条直线都没有...原创 2018-11-06 15:00:35 · 589 阅读 · 0 评论 -
CF 580D Kefa And Dishes 状压DP
题意:n件物品,第i件物品价值为a[i].现在要选m件物品.有k个加成,若物品x正好在物品y的前一个 则总价值+a[x][y]m暴力dfs O(C(n,m)*m!) TLE....建图 (i->j)的边权值为(a[i]+c[i][j]).现在就是找到一条长度为m-1并且权值最大的路径.明显状压.设dp[s][u] 表示在u点,并且经过的点的状态为s.原创 2018-04-08 20:42:42 · 253 阅读 · 0 评论 -
牛客挑战赛12.C 删除子串 DP
题意:一个长度为n且由a和b组成的字符串,变化:如果a[i]!=a[i+1]则为一次变化。(且新的字符串的首字母必须是'a') nm很小 设dp[i][j][0/1] 表示前i个字符变化j次并且以'a'或者'b'结尾是的最长长度.若a[i]=='a' dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j-1][1])+1 , dp[i][j][1]原创 2018-03-24 12:01:39 · 312 阅读 · 1 评论 -
CF 909C Python Indentation DP(依题意,设状态)
题意;长度为n的字符串a, 若a[i]=='s'表示可以放一个简单句.若a[i]=='f'则表示可以放一个循环句 该循环句可以嵌套简单句及循环,并且循环后不能为空句n5 fsfss 最后一个s有三种情况 :单独,嵌套在第二个循环中,只嵌套在第一个循环中.f,s要么在循环体内要么在循环体外.若在循环体内 则还要分在第几个循环.所以设置dp[i][j] 表示前原创 2018-03-03 23:41:02 · 238 阅读 · 0 评论 -
CF 462C. A Twisty Movement 思维,DP
题意:长度为n的序列a,序列a只包含数字1和数字2.n因为序列a只有1和2,LIS子序列为11112222形式.那么翻转之前,最优的子序列也就是 11122211122 这种形式.要么等价于在序列a中找到最长的1*2*1*2*子序列.设d[0,1,2,3] 分别表示为1, 12,121,1212形式的最长子序列即可.#include using namespac原创 2018-02-15 13:33:54 · 231 阅读 · 0 评论 -
CF 946D. Timetable 暴力+DP
题意:某星球一周有n天,每天m个小时.每天小A会在该天第一次上课时间p,直到最后一次上课时间q待在学校 共q-p+1小时.给出课表s,若s[i][j]=='1'代表有上课 否则代表没课.问溜掉不超过k节课 使得小A这n天在学校的总时间最小. n,m,k如果每次只考虑删一次最多能减小多少,容易找到反例1 24 2110000000000000101010101跑出的结原创 2018-03-07 08:49:31 · 408 阅读 · 0 评论 -
CC Killing Monsters 分块+DP(SoS)
题意:n个怪兽 第i只的血量为h[i].Q次操作,第i次操作为(x,y) 对所有满足i&x=i的下标i 其血量减少y.n0.给出x x&i==i的下标i 肯定为x的子集 例如x=011110 i= 0????0 ?可以为0或者1.子集什么,试一试用SoS 假如下标i二进制表示为 101100 那么对它有伤害的操作其x为 1?11?? i为x的子集 则i为1的位置必须置为1,原创 2018-01-21 17:59:42 · 549 阅读 · 0 评论 -
CodeChef DEC17 C Total Diamonds 递推
题意:n*n的网格,(i,j)的编号为i+j,价值为编号位数中:偶数数字和奇数数字的差的绝对值 例如编号1222 价值为|2+2+2-1|=5.T注意行与行之间的关系 第i行和第i-1行的编号除了首位和末位不同其它的都相同(第i行第x个等于第i-1行第x+1个).设f[x]为数字x的价值,d[i]为第i行的总价值 则d[i]=d[i-1]-f[i-1+1]+f[i+i-1]+f原创 2017-12-08 10:43:28 · 275 阅读 · 0 评论 -
51nod 40 选择子序列 单调栈+DP
题意:长度为n的序列a.每个数都不相同. 找到一个序列b 0 A[b[1]]> ...A[b[k]]. 并且:A[j]na[b[i]]要大于(a[b[i]]~a[b[i-1]])之间的数. 选下一个数,可以在上一个数的左右两边 而且不知道要选哪一个 不好处理.先保存每个数的下标 然后将序列按照权值从大到小排序.设dp[i]为以排序后下标i结尾 选出最原创 2017-12-30 20:02:54 · 236 阅读 · 0 评论 -
CS 400 Seven-egment Display 贪心+模拟,DP
CS 400题意:a[i]:数字i需要的火柴个数[i=0..9] 问正好用k个火柴时 最小能拼成的数是多少? ka[]={6,2,5,5,4,5,6,3,7,6}.首先位数尽量小,总共位数为k/7位.剩下r=k%7个火柴{0~6} 分别讨论一下 例如r=1时 拆掉一个7 现在用8个火柴 放一个1和0.即可.现在位数确定了 但是数还可以减小 例如k=10 得到78 但可以减小到2原创 2017-12-05 11:25:53 · 226 阅读 · 0 评论 -
CF 161D Distance in Tree 树形DP(套路,路径长度为k点对)
题意:n个节点的树,问有多少对(i,j)其最短距离等于K.n设d[i][j][0/1]从节点i向下或者向上走长度为J的方法数.dp[i][j][0]+=dp[son][j-1][0].dp[i][j][1]+=dp[fa][j-1][1]+dp[fa][j-1][0] (i-fa->fa的前i-1个子树中,总是往左走)ans+=dp[i][k][1] 第i个点作原创 2017-11-25 18:15:36 · 540 阅读 · 0 评论 -
CS 400 Restricted Permutation 排列,DP计数
题意:给出序列a,a[i]为1:数字i出现在数字i+1之前 ,a[i]为0:数字i出现在数字i+1之后n假设y=x+1出现在x之后 已知前x=6的数的某个排列为 00X000 现在若y在第4个位置上 则 ...Y... 则X放入的位置可以为1~3 例如X放入位置3 就对应dp[x][3]的排列个数.(原本在j的位置向后偏移)设dp[i][j]:[1..i]排列满足限制 并原创 2017-12-04 16:38:34 · 271 阅读 · 0 评论 -
CF984 D. XOR-pyramid 杨辉三角,DP
题意:定义长度为m的序列b,其值为f(b)=f( b[1}^b[2],b[2]^b[3],..,b[m-1]^b[m]) m>1 Q次询问,每次询问[L,R]内价值最大的子区间. n<=5e3, 0<=a[i]<2^30 Q<=1e5.若b的长度为m,设:p[i]为b[i]的系数,p[i]=C(m-1,i-1)%2.则序列b的价值最后为:f(1,m)=p[1]*b...原创 2018-05-17 23:53:09 · 323 阅读 · 0 评论 -
Atcoder 600 Sorted and Sorted 逆序数,DP
题意:给出n个黑球和n个白球的编号和其位置.(a[i],i).操作:交换相邻两个球的位置.1<=n<=2e3. 问将2n个球排成有序,(任意两个黑球(i,j),i<j 使得球i在球j之前. 白球也是如此).问最少操作次数?设(x,y)为逆序对:当x原先在y左边,全部操作后x在y的右边.那么每操作一次,都产生一个逆序对.若知道最后的序列 则其操作次数为总的逆序数对.设dp[i][j...原创 2018-05-18 18:24:40 · 442 阅读 · 0 评论 -
牛客 练习赛17B 好位置. DP
题意:给出两个串s,x.定义i为好位置.当存在包含位置i的子序列和x相同.|s|,|x|判断i是否为好位置,那么可以分为前缀i,后缀i+1.s的前缀i在x匹配到的位置显然越后越优.设pre[i]为前缀i最多能匹配多少个.f[i]为以位置i结尾的子序列最多匹配多少个.f[i]那么s[i+1:n]是否有x[f[i]+1:m]这一个子序列. 翻转s,x原创 2018-05-08 16:37:37 · 212 阅读 · 0 评论 -
CF 505D. Recovering BST 降维,DP
题意:长度为n的序列a.问是否能通过序列a构造出一棵n个节点的BST.并且若有边(u,v) 则gcd(u,v)>1.n<=700, 1<=a[i]<=1e9. 设f[l][r][i] 序列[L,L+1..R]并且以i为根时 是否能构造出合法的BST.F[L][R][u] = f[L][u-1][x] && f[u+1][R][y]...原创 2018-11-04 00:31:17 · 165 阅读 · 0 评论 -
CF 500E. Hills DP(状态设置)
题意:长度为n的序列a,定义位置p为合法,当 a[p]>a[p-1] && a[p]>a[p+1].操作:选择某个pos,令a[pos]--.n<=5e3,a[i]<=1e5. 对k=[1...n/2] 询问,至少k个位置合法时的最小操作次数? 先分析一下: 位置p合法 则位置 p-1, p+1都为非法. 若a[p-1]>p 或者...原创 2018-11-04 00:30:20 · 196 阅读 · 0 评论 -
NCPC 16 C Card Hand Sorting 思维,二元组LIS
题意:扑克牌有4种花色{s,h,d,c}. 现在有n张扑克牌牌={花色,编号}.要求:将同一种花色牌放在一起.并且同一花色中编号按从小到大或者从大到小顺序放.操作:把某张牌插入任意两种牌中间,或者放到头尾.n<=52. 问满足条件时 最少要用多少次操作?假设只有一个类型花色. 那么将序列排序需要的最小操作次数为:n- LIS (排序后LIS=n,一次操作最多让LIS+1)...原创 2018-11-04 00:33:04 · 274 阅读 · 0 评论 -
NCPC 14G. Outing 图论(出边),DP
题意:[1..n].n个人.如果想要邀请第i个人 则必须要邀请第a[i]个人.1<=k<=n<=1000. 邀请的人数不超过k时. 最多能邀请多少个人?先建图,连接有向边(i,a[i]) 若邀请x 则要邀请以x为起点遍历的联通分量.因为每个点只有一个出边. 所以每个联通分量都是以 一个环 + 若干个分支(tributary)组成.选择该联通分量任意一点 都要把环选上 ,...原创 2018-11-03 22:14:49 · 419 阅读 · 0 评论 -
HDU 6321 Dynamic Graph Matching 状压,背包
题意:n个点的图,初始没有边. m次操作,添加或者删除边(u,v).n<=10,m<=3e4. 每次操作后,询问k=[1,2...n/2]的匹配方案数?n<=10. 设dp[i][s] 第i次操作后,点s中的所有bit为1的点,都相互匹配的方案数.添加一条边:dp[i][s]= dp[i-1][s]+ dp[i-1][s-{u,v}] (s中用(u,v)匹配 或者不用(u...原创 2018-10-26 17:15:23 · 123 阅读 · 0 评论 -
51nod 40 完全图 DP
题意:n点m条边的完全图,问有多少种删除边的方案使得正好有m个联通块. n,m<=500.设dp[i][j] i个点有j个联通块的方案数. 按照最后一个联通块的大小进行转移.dp[i][j]=C(i-1,k-1)*dp[k][1] * dp[i-k][j-1].[k=1..i].k==1时 总共方案为2^(i*(i-1)/2) 减去 dp[i][2:i]的方案即可.#include <...原创 2018-07-11 10:07:14 · 149 阅读 · 0 评论 -
CF Round 245D.Working Out DP(不相交路径)
题意:n*m矩阵,(i,j)的价值为a[i][j],两个起点分别为(1,n),(n,1) 对应终点为(n,m).(1,m).第一个起点的人只能向下和右移动,第二个起点的人只能向上和右移动.1<=n,m<=1e3.问这两个人的路径正好只有一个交点时的最大价值?枚举交点(x,y) 那么(1,1),(n,1) 到(x,y)的路径不能相交并且价值要尽量大.设f[x][y]为(1,1)到(x,y...原创 2018-06-02 14:59:59 · 196 阅读 · 0 评论 -
CF 981D Bookshelves 按位贪心,DP
题意:长度为n的序列a,每个区间价值为:该区间内所有的数相加.1<=k<=n<=50, 0<a[i]<2^50,现在将序列a分成k段,要求这k段价值的AND结果最大.从最高位x开始贪心,初始ans=0.check:若前n个分成k段 并且每段的和 sum & (ans+2^x) 那么使ans+2^x 继续判断.判定时:设dp[i][j] 表示前i个分成j段 每段...原创 2018-05-28 15:37:58 · 486 阅读 · 0 评论 -
CF Edu44E Pencils and Boxes DP
题意:长度为n的序列a,box的数量无限个,每个box要么是空的要么至少装k个.同一个box中,任意两个数a[j]-a[i]<=d. n,k<=5e5.a[i],d<=1e9. 问是否能将n个数字装到box中.排序后xjb贪心 各种wa....因为每个box装的都是连续的某段数(显然更优).设dp[i]为前i个数是否有解,按照最后一段的长度来转移.因为最后一段长度至少为k 并且 ...原创 2018-05-23 19:29:28 · 133 阅读 · 0 评论 -
CF Round 138C Bracket Sequence 括號匹配,DP
题意:长度为n的括号序列,包括'[]','()'.要求找到一个正确的括号区间[L,R]并且'['的数量最多.n<=1e5.输出最多'['的值和区间[L,R].因为'['为左端点时,下一个数只能为']'或者左括号.设dp[i]为左端点为i时最远能完成匹配的位置.若s[i]==']'||s[i]==')] dp[i]=-1;若s[i]=='[' 当s[i+1]==']' dp[i]=max(i+...原创 2018-05-26 00:00:35 · 145 阅读 · 0 评论 -
Atcoder 500 FT Robot DP
题意:给出操作序列s. 'F'表示朝当前方向前进一格. 'T'表示将当前方向,顺时针或者逆时针旋转90度.起点在(0,0)方向面向x轴正向.问在操作序列s下 能否到达点(x,y)? |x|,|y|,|s|第odd个T,到下一个T之间的F改变的是y轴的偏移量,dy要么是+F或者-F.第even个T,到下一个T之间的F改变的是x轴的偏移量,dx要么是+F或者-F.求出每段的偏原创 2017-12-20 19:19:24 · 289 阅读 · 0 评论 -
BZOJ 5107 找爸爸 DP
BZOJ 5107题意:给出两个长度分别为n,m的字符串a,b.字符串只包含{A,T,C,G}.操作:在两个序列的任意位置插入任意多的空格,使得两个字符串长度相同.操作结束后进行匹配,计算价值:若当前比较位都不是空格 则价值+=d[a[i]][b[i]] 并定义g(k)=-A-B(k-1) k为a,b中连续空格的个数 最后价值在加上所有的g(k).0样例ATGG原创 2017-11-29 15:15:34 · 310 阅读 · 0 评论 -
HDU 5496 Beauty of Sequence 线性DP
HDU 5496题意:定义子序列的价值为:若该子序列有连续相同的数,则保留第一个,剩下的数之和即为价值i.e 子序列b={1,1,1,1} 价值为1 b={1,2,1,2} 价值为6.给出长度为n的序列a 求出其所有子序列价值的之和. n设d[i]为以i结尾的 子序列价值累加和(不重复计算连续相同的数),f[i]为以i结尾的子序列个数.f[i]=2^(i-1).假如n原创 2017-11-15 12:54:08 · 307 阅读 · 0 评论 -
HDU 4991 Ordered Subsequence DP(套路,BIT优化)
HDU 4991题意:给出长度为n的序列a,问a有多少个单调递增的子序列并且其长度为mn设dp[i][j]为递增子序列以a[i]结尾,长度为j的个数.dp[i][j]=dp[i][j]+dp[k][j-1] (a[k]a[i]外层枚举j,则算dp[i][j]时 将dp[i-1][j-1]压入到对应的a[i-1]位置上.则此时BIT中 存的是dp[1~i-1][j原创 2017-10-04 17:37:28 · 245 阅读 · 0 评论 -
CS Maxor 或运算,DP(SOS)
题意:长度为n的序列a,选出两个元素,其或运算结果的最大值为多少,并求出a[i]|a[j]==mx的方案数?n假如最大值为mx,若x|y=mx 则x和y肯定为mx的子集.否则或运算结果肯定不为mx.枚举最大值 在枚举mx的子集x. 则此时y要包含(mx-i)这个子集.(若y比mx多出某个为1的bit位 则后面最大值还会更新.)求个数,则需要知道序列中有多少个元素有子集m原创 2017-10-19 21:11:31 · 535 阅读 · 2 评论 -
HDU 4745 Two Rabbits 最长回文子序列
题意:n个石头围城一圈,第i个石头权值为a[i].两个人初始可以在任意一个石头上.A只能顺时针跳,B只能逆时针跳,每个人都不能跳到自己已经跳过的石头 并且也不能跳跃过去,比如石头2被踩过,则0->4跳跃非法.每一个轮两人同时起跳 要求每轮两人所在的石头的权值都相同,问最多能玩多少轮? n,a[i]样例:211213 答案为5 感觉是字符串匹配.顺时针写两次,破环成链.一个顺时针原创 2017-09-22 14:12:35 · 203 阅读 · 0 评论 -
HDU 4739 Zhuge Liang's Mines 暴力 or 状压.
题意:给出平面上n个点(x,y) 若4个点形成正方形(本题只要求平行于坐标轴的),则可以删除这4个点.删除的点不在考虑.n一个点配成正方形方案有多种时,其配对方式可能会导致答案不同(可以举例 不能随便配对.)暴力dfs生成所有方案.枚举一个点为左上角,x,y#include using namespace std; const int N=3e2+5;struct n原创 2017-09-22 10:26:34 · 289 阅读 · 0 评论 -
HDU 5125 Magic Balls DP(LIS变形)
HDU 5125题意:给出长度n的序列a,b.操作:swap(a[i],b[i]) 问操作次数n,m一般来说求LIS时 设d[i]为以a[i]结尾时的最长长度,现在第i为可能为a[i]或者b[i]加上一维.d[i][0/1] 其前面一个 j 要么为a[j]或者b[j] 按题意转移即可交换次数不超过m,设置num[i][0/1]表示到达该状态需要用到的最小交换次数.若nu原创 2017-10-08 10:15:38 · 241 阅读 · 0 评论 -
HDU 5148 Cities 树形DP(背包)
HDU 5148题意;n个点的树,第i条边长度为c[i],任意选中k个点为特殊点,这k个点中,任意两点间距离的期望值最小为多少?nk个点任意选两个有k^2种选法 (u,v)对期望贡献为 dis(u,v)/k^2 也就是说要求这min(k个点中任意两点距离累加和/k^2)先考虑一个特殊的情况 当k==n时 树上任意两点距离的累加和.若u的子树中,有x个节点被选中,则(u,原创 2017-10-07 15:20:07 · 183 阅读 · 0 评论 -
BZOJ 1009 GT考试 KMP+矩阵快速幂.
题意:b为非法数字b[1]...b[m],其位数n 先不考虑n范围 则可以设置dp[i][j]表示放了合法放了前i位,其后缀j和非法的前j位相同的方法数.转移状态显然是一位一位添加显然dp[i+1][j+1]+=dp[i][j] 添加b[j+1] 若新添加的a[i+1]!=b[j+1] 算出此时a的后缀能匹配b的最长前缀是多少.联想到kmp,枚举匹配到i然后再枚举新原创 2017-09-11 17:40:17 · 328 阅读 · 0 评论 -
BZOJ 1087 互不侵犯King 状态压缩DP
题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子,nn则一行一行放 预处理(i,j)两个状态是否可以为相邻行后,合法转移状态即可#include using namespace std;typedef long long ll;const int N=2e3+20;bo原创 2017-09-11 15:11:14 · 208 阅读 · 0 评论 -
BZOJ 1096 仓库建设 斜率DP
题意:n个工厂在一条直线上,第i个工厂有p[i]件产品.坐标为x[i],在第i个工厂建立仓库花费为c[i].现在每个工厂的产品要么到自己建立的仓库中要么到其下一个编号比它大的仓库中.(运输费用为距离*运输数量)n因为只能编号小的只能往编号大的运 所以可以设置dp[i] 前i个需要的最小费用 并且在第i个建立工厂.dp[i][1]=c[i]+min(dp[j]]+co原创 2017-09-14 12:18:40 · 167 阅读 · 0 评论 -
BZOJ 1026 windy数 数位DP
题意:不含前导零且相邻两个数字之差至少为2的正整数被称为windy数求[a,b]内的windy数? a,b记录位数和前面一个数字.数位dp存当前状态出发时能获得的方法数.暴力记忆化即可.注意:返回dp[pos][sta]时:当sta为0 要判断当前状态是否为前导0状态.#include using namespace std;typedef long long ll;type原创 2017-08-23 11:55:45 · 235 阅读 · 0 评论 -
BZOJ 1003 物流运输 DP+最短路.
题意:m个点,e条带权边.d个限制:pi,ai,bi 表示pi这个点在[ai,bi]天无法到达.现在有n天,每天都从1出发走到m.如果今天路线和昨天路线不同则要增加费用K.m每次不一定走最短路,换线费用大或者换线次数多..设f[i]为前i天需要最小费用,最后一次换线在第j天时,则j+1,i只能为同一条路线.预处理cost[i][j]为第i天到j天都能走的路径中的最短路.f[原创 2017-08-24 11:26:52 · 257 阅读 · 0 评论 -
Hackerearth SPECIAL PAIRS DP(SOS).
题意:长度为n的序列a,选两个数(a[i],a[j]) 问a[i] & a[j] == 0的方案数.n假如x=101001 若x&y=0 则y:0?0??0 即y为010110的某个子集.设F[mask] 序列a中有多少个数为mask的子集. dp[mask][i] 类似01背包DP:mask,i位数字的子集个数,第i位和mask相同或者不同dp[mask[i]=dp[原创 2017-10-19 22:01:15 · 433 阅读 · 0 评论