dp
fnliren
一位无名没脑老年退役oier
展开
-
[NOMURA Programming Competition 2020]E - Binary Programming
Portal先考虑倒着操作,也就是变成每次删除后统计贡献,最后加上原序列的贡献即可。由于显然可以将删除顺序看成一个排列,那么就考虑对这个排列进行dpdpdp。也就是设f(i)f(i)f(i)表示仅考虑前iii个字符时的最大权值(不考虑原序列的贡献),转移到f(i+1)f(i+1)f(i+1)就是新增第i+1i+1i+1个字符。当新增字符为111时,通过贪心可以发现一定是最后删除最优,所以它新增的贡献就为⌈i2⌉\lceil\frac{i}{2}\rceil⌈2i⌉。而当新增字符为000时,贡献其实就是原创 2020-06-05 11:43:40 · 352 阅读 · 0 评论 -
[AtCoder Regular Contest 098]F - Donation
Portal挺套路的。。。考虑倒过来操作。假设最后在点xxx上,剩余的钱为ansansans,那么ansansans一定不小于Ax−BxA_x-B_xAx−Bx,先假定W=ans=Ax−BxW=ans=A_x-B_xW=ans=Ax−Bx。之后让W+=BxW+=B_xW+=Bx,然后若yyy与xxx直接相连,并且WWW不小于Ay−ByA_y-B_yAy−By,就可以让W+=ByW...原创 2020-02-17 17:13:23 · 321 阅读 · 0 评论 -
[bzoj 4976]宝石镶嵌
魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,…,w_n。他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力。不幸的是,小Q的法杖上宝石镶嵌栏太少了,他必须扔掉k个宝石才能将剩下的宝石镶嵌上去。法杖的威力等于镶嵌在上面的所有宝石的魔力按位做或(OR)运算的结果,请写一个程序帮助小Q做出最佳的选择,使得法杖的威力最大。好吧,这道题看到或运算,就应该想到跟二进制有关。我们发现...原创 2018-03-23 07:58:29 · 240 阅读 · 0 评论 -
[bzoj 4300]绝世好题
给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len)。这道题它的(名字很。。。)思路挺巧的吧,xgc大佬秒A啊,太强了。我之后想了一会才会,也不算太难。看到这种位运算的题就应该往二进制方向去想,发现a[i]转为二进制后只有30位,f[i]表示当前这个数以二进制中的第i位(这个位肯定为1了)为结束的最长长度,那方程就...原创 2018-03-29 20:22:22 · 160 阅读 · 0 评论 -
[bzoj 1212--HNOI2004]L语言
标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的。现在你要处理的就是一段没有标点的文章。一段文章T是由若干小写字母构成。一个单词W也是由若干小写字母构成。一个字典D是若干个单词的集合。我们称一段文章T在某个字典D下是可以被理解的,是指如果文章T可以被分成若干部分,且每一个部分都是字典D中的单词。例如字典D中包括单词{‘is’, ‘name’, ‘what’,‘your’},则文章‘...原创 2018-04-24 19:41:40 · 355 阅读 · 0 评论 -
[bzoj 4380--POI2015]Myjnie
有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]。有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个进行一次消费。但是如果这个最便宜的价格大于c[i],那么这个人就不洗车了。请给每家店指定一个价格,使得所有人花的钱的总和最大。这道题#include&lt;cstdio&gt;#include&lt;cstring&gt...原创 2019-01-12 10:37:57 · 259 阅读 · 0 评论 -
[bzoj 1226--SDOI2009]学校食堂Dining
小F的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭。学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴。当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示。由于人手不够,食堂每次只能为一个人做菜。做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为(aor b)-(a and b),而做第一道菜是不需要计算时间...原创 2019-01-25 23:40:16 · 208 阅读 · 0 评论 -
[bzoj 2121]字符串游戏
BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删除,如果删除,则将删除后L分裂成的左右两部分合并。举个例子,L=‘abcdefg’ ,S={‘de’},如果BX选择将’de’从L中删去,则删后的L=‘abcfg’。现在BX可以进行任意多次操作(删的次数,顺序都随意),他想...原创 2019-01-26 17:29:16 · 446 阅读 · 0 评论 -
[bzoj 2302--HAOI2011]Problem c
给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1,ai+1也被占据了的话就尝试ai+2,……,如果一直尝试到第n个都不行,该安排方案就不合法。然而有m个人的编号已经确定(他们或许贿赂了你的上司…),你只能安排剩下的人的编号,求有多少种合法的安排方案。由于答...原创 2019-01-30 23:28:05 · 1675 阅读 · 0 评论 -
[bzoj 3622]已经没有什么好害怕的了
已经使Modoka有签订契约,和自己一起战斗的想法后,Mami忽然感到自己不再是孤单一人了呢。于是,之前的谨慎的战斗作风也消失了,在对Charlotte的傀儡使用终曲——Tiro Finale后,Mami面临着即将被Charlotte的本体吃掉的局面。这时,已经多次面对过Charlotte的Honiura告诉了学OI的你这样一个性质:Charlotte的结界中有两种具有能量的元素,一种是“糖...原创 2019-03-16 14:07:49 · 204 阅读 · 0 评论 -
[bzoj 4709--Jsoi2011]柠檬
Flute很喜欢柠檬。它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬。贝壳一共有 N (1 ≤ N ≤ 100,000)只,按顺序串在树枝上。为了方便,我们从左到右给贝壳编号 1…N。每只贝壳的大小不一定相同,贝壳 i 的大小为 si(1 ≤ si ≤10,000)。变柠檬的魔法要求,Flute 每次从树枝一端取下一小段连续的贝壳,并选择一种贝壳的大小 s0。如果 这一小段贝壳中 ...原创 2019-04-05 14:10:31 · 346 阅读 · 0 评论 -
[AtCoder Grand Contest 036]F - Square Constraints
题意好题。明确要用容斥原理。设i能选择的pi范围为li~ ri。若能求到对于每个k(0<=k<=n,因为n~ 2n-1的l为0),满足所有pi<=ri,至少有k个pi<li的排列数,就可以用二项式反演进行容斥了。而没有性质的话这题就不可做了,所以一开始肯定是找性质。而这题最关键的性质就是0~n-1的r肯定都大于l。把0~ n-1的li-1和n~ 2n-1的r放...原创 2019-07-23 23:39:05 · 462 阅读 · 0 评论 -
[bzoj 4518--SDOI2016]征途
Pine开始了从S地到T地的征途。 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站。 Pine计划用m天到达T地。除第m天外,每一天晚上Pine都必须在休息站过夜。所以,一段路必须在同一天中走完。 Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小。 帮助Pine求出最小方差是多少。 设方差是v,可以证明,v×m^2是一个整数。...原创 2018-03-18 15:36:20 · 369 阅读 · 0 评论 -
[bzoj 3174--TJOI2013]拯救小矮人
一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯。即:一个小矮人站在另一小矮人的肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口。对于每一个小矮人,我们知道他从脚到肩膀的高度Ai,并且他的胳膊长度为Bi。陷阱深度为H。如果我们利用矮人1,矮人2,矮人3,。。。矮人k搭一个梯子,满足A1+A2+A3+….+Ak+Bk>=H,那么矮人k就可以离开陷阱逃跑了,一旦一...原创 2018-02-08 14:38:12 · 243 阅读 · 0 评论 -
[bzoj 1218--HNOI2003]激光炸弹
Description 在长为5001的正方形矩阵中,有n个特殊的点,有相应的值。现在用一个与x,y轴平行的长为R的正方形矩阵套点(不含边缘),使里面的特殊点的总值最大。 Input 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示位置与值。 Output 输出文件仅有一个正整数,表示最大值(结果不会超过32767)。 Sampl原创 2016-10-09 14:03:57 · 534 阅读 · 0 评论 -
[bzoj 1084--SCOI2005]最大子矩阵
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵 不能相互重叠。 Input 第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的 分值的绝对值不超过32767)。 Output 只有一行为k个子矩阵分值之和最大为多原创 2016-09-11 16:35:16 · 712 阅读 · 0 评论 -
[bzoj 1019--SHOI2008]汉诺塔
Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。 对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层,同时要保证被移动的盘子一定放在比它更大的盘子上面(如果移动到空柱子上就不需要满足这个要求)。我们可以用两个字母来描述一次操原创 2016-09-22 13:59:00 · 765 阅读 · 0 评论 -
[bzoj 1042--HAOI2008]硬币购物
Description 硬币购物一共有4种硬币。面值分别为c1,c2,c3,c4。某人去商店买东西,去了tot次。每次带di枚ci硬币,买si的价值的东西。请问每次有多少种付款方法。 Input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s<=100000,tot<=1000 Output 每次的方法数 S原创 2016-09-23 13:31:54 · 441 阅读 · 0 评论 -
[bzoj 1079--SCOI2008]着色方案
有n个木块排成一行,从左到右依次编号为1~n。你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块。 所有油漆刚好足够涂满所有木块,即c1+c2+…+ck=n。相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案。真是一道大神题啊。一开始看到时乱想一大推,但其实原来这题如此巧妙。 其实像这样统计方案的问题,一般就是用dp来做的,只不过这题dp用记忆化搜索罢了原创 2017-11-19 16:44:13 · 631 阅读 · 0 评论 -
[VijosP1792]摆花
描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。试编程计算,一共有多少种不同的摆花方案。 输入格式 输入文件共2行。第一行包含两个正整数n和m,中间用一个空格隔开。第二行原创 2016-09-30 13:54:47 · 508 阅读 · 0 评论 -
[bzoj 1911--Apio2010]特别行动队
这道题,一看就知道是dp了,但范围之大提醒着我们这道题并不简单。对,这题要用斜率优化,还比较容易的那种。 先设i>j>k, f[j]+a*(sum[j]-sum[i])^2+b*(sum[j]-sum[i])+c>=f[k]+a*(sum[k]-sum[i])^2+b*(sum[k]-sum[i])+c 化简得 [(f[j]+a*sum[j]^2-b*sum[j])-(f[k]+a*sum[原创 2017-12-31 10:27:29 · 1051 阅读 · 1 评论 -
[bzoj 3437]小P的牧场
小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧场一直到它西边第一个控制站的所有牧场(它西边第一个控制站所在的牧场不被控制)(如果它西边不存在控制站,那么它控制西边所有的牧场),每个牧场被控制都需要一定的花费(毕竟在控制站到牧场间修建道路是需要资源原创 2018-01-02 14:06:37 · 613 阅读 · 0 评论 -
[bzoj 3156]防御准备
这道题一看就是dp,不过数据范围让我们不能O(n^2),所以就要优化。dp方程为f[i]=min(f[j]+(i-j)*(i-j-1)/2+a[i]),这种形式便想到了斜率优化。 设i>j>k,j比k优 f[j]+(i-j)* (i-j-1)/2+a[i]< f[k]+(i-k)* (i-k-1)/2+a[i] 化得 [(f[j]+j* (j+1)/2)-(f[k]+k* (k+1)/2)]原创 2018-01-21 08:44:32 · 255 阅读 · 0 评论 -
[bzoj 3675--Apio2014]序列分割
小H最近迷上了一个分隔序列的游戏。在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列。为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列); 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列。 每次进行上述步骤之后,小H将会得到一原创 2018-01-21 11:32:43 · 229 阅读 · 0 评论 -
[bzoj 1835--ZJOI2010]基站选址
有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di。需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci。如果在距离第i个村庄不超过Si的范围内建立了一个通讯基站,那么就成它被覆盖了。如果第i个村庄没有被覆盖,则需要向他们补偿,费用为Wi。现在的问题是,选择基站的位置,使得总费用最小。 输入数据 (base.in) 输入文件的第一行包含两个整数N,原创 2018-01-24 14:16:45 · 278 阅读 · 0 评论 -
NOI OpenJudge 7627:鸡蛋的硬度
描述 有n层楼,m个鸡蛋,如果鸡蛋从第a层摔下来没摔破,但是从a+1层摔下来时摔破了,那么就说这个鸡蛋的硬度是a。这些鸡蛋硬度相同,在求鸡蛋的硬度下问使用最优策略在最坏情况下所需要的扔鸡蛋次数。 样例输入100 1100 2 样例输出10014这道题用的是动态规划。f[i][j]表示i层楼j个鸡蛋所需要的扔鸡蛋次数。重点讲一下dp方程(f[i][k]=min(f[i][k],原创 2016-09-13 13:49:50 · 1822 阅读 · 1 评论