自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 Codeforces 834D The Bakery DP(线段树维护)

题意:k个盒子,n个蛋糕,第i个蛋糕为种类a[i],每次把连续一段的蛋糕装到某个盒子中.价值为该盒子里蛋糕种类不同的个数 n设dp[i][j]:前j个蛋糕放到i个盒子中的最大价值,f(x,j)为[x,j]中蛋糕不同的个数.dp[i][j]=max(dp[i-1][x-1]+f(x,j)) 用线段树维护dp[i-1][x-1]+f(x,j) 先把dp[i-1][1-n]插入到线段树中,随着j

2017-07-31 12:26:01 358

原创 ARC 064F Rotated Palindromes DP(回文移位,循环节)

题意:给出n,k.问有多少个长度为n的序列a满足:1i.e:1,1,2,2 左移一次-> 1,2,2,1. n,k不考虑移位总共有k^(n/2)个回文,每个都可以操作n次,得到n个合法序列.如何去掉重复的?回文串的循环节肯定为回文.按照回文串的最小循环节长度来更新答案若回文串的最小循环节长度为c,经过c次操作后,得到c个序列当c为偶数时,重复数为一半,奇数时,无重复

2017-07-30 17:38:55 891

原创 HDU 6053 TrickGCD DP(筛法)

题意:给出序列a,a[i]1=2设dp[x]:gcd为x的个数 则b中每个元素都为x的倍数 b[i]若a[i]/d=k贡献为k,则和它相同贡献有cnt[kd,(k+1)d-1]个,则总共贡献k^cnt.最后容斥减掉gcd为jx的部分(j>1).O(nlog^2n)#include using namespace std;typedef long long ll;c

2017-07-27 21:22:50 759 1

原创 HDU 4906 Our happy ending 状压DP

题意:给出n,k,L,问有多少种长度为n的序列,其0n,k某些和最多就20种,状态压一压,第i位二进制为1代表序列和可以为i,设dp[i][s] 长度为i状态为s的方案数.每次加入x(x大于k的数有cnt个 则长度+1,s->s转移到自己就有cnt种方案#include using namespace std;typedef long long ll;const

2017-07-26 18:34:02 391

原创 HDU 4901 The Romantic Hero DP(计数)

题意:n个数a[i],两个集合s,t,s中下标最大的小于t中下标最小的(s的元素都在t元素的左边),问s中元素的异或和等于t中元素的and和的方法数,n,a[i]a[i]这样计算明显有重复,因为1-p  q-n 这两个方案可以在 前缀i,i+1中对应的方案出现(q>>i pd[i][x] 集合s最后一个数为i时异或和为x的方法数,同时处理出前缀i异或和为y的个数来转移状态.则集

2017-07-26 14:18:51 374

原创 HDU 4888 Redraw Beautiful Drawings 最大流(唯一性)

题意:n*m矩阵 告诉每行的和,每列的和,问每个格子只能填0~k时 是否有解,若有唯一解 输出该解.n,m每行i每列j看作一个点,i->j的容量为k 流量就相当于a[i][j]源点连接每行,容量为行和.列连接汇点,容量为列和.若有解 则一定能跑出最大流,(行累加和等于列累加和,源点流出要等于汇点流入) 若残余网络中存在长度大于2的环,沿着环每条边流量++(反向边流量++时,撤销

2017-07-24 17:10:25 372

原创 AGC 018C Coins 贪心(排序)

题意:n个人(n=x+y+z) 每个人有金银铜三种颜色硬币a[i],b[i],c[i]个,问向x个人拿金,y个人拿银,z个人拿铜,只能向每个人要一次,最多能拿到多少硬币? n先考虑每个人只有两种硬币的情况,按照a[i]-b[i]从小到大排序后,因为j>i时 a[j]+b[i]>a[i]+b[j] 任意一个金都应该选在任意一个银之后才能能最优.把c累加进ans,(a,b,c)就转换成(a

2017-07-24 10:34:20 435

原创 Codeforces 825F String Compression DP(最小循环节)

题意:字符串s,s能压缩成c1s1c2s2..cksk时,表示把s1写c1次,s2写c2次...能得到s|s|设dp[i] 前缀i压缩后的最小长度dp[i]=min(dp[i],dp[j]+"s[j+1]..s[i]") 最后一段肯定用最小循环节来表示求出后缀i的next数组时,就能知道i-j(j>=i)最小循环节的长度#include using namespace s

2017-07-23 14:21:40 418

原创 HDU 4870 Rating 概率DP(高斯消元)

题意:初始rating为0,每次比赛有p的概率变为min(x+50,1000),(1-p)的概率变为(x-100,0).0.3S的下一个状态为S'=ax+by,E(ax+by)=aE(x)+bE(y)rating不超过1000 设dp[a][b] rating为a,b时 有一个号等于1000时 参加比赛次数的期望因为每次用较小的一个,比赛的最后一步肯定为(950,950)->(

2017-07-22 18:28:31 397

原创 Codeforces 463D Gargari and Permutations DP(LCS变形)

题意:k个1~n的排列,求这k个排列的LCS.k法1:因为序列为排列,设dp[x]以x结尾能得到最长的LCS.当x出现k次时 说明x能作为结尾 枚举能接在其前面的数即可 O(k*n^2)#include using namespace std;typedef long long ll;const int N=1e3+20;int dp[N],a[N][N],n,k,po

2017-07-22 10:43:50 468

原创 Codeforces 478D Red-Green Towers 构造+DP

题意:用r个红方块和g个绿方块构造高度为h的楼时,要满足第i层有i个方块,并且相同层的方块颜色相同.方块可以不全部用完r,g首先最大高度h(1+h)所以当红色用r个时,剩下sum-x肯定小于等于g 把g按照若干组分割,得到一个合法法案.已知高度h,剩下就考虑那些层涂红色,若红色用了x个 则要知道[1,h]个数中 选某些个数其和为x的方法数并且剩下sum-x个要#incl

2017-07-21 11:29:43 405

原创 Codeforces 341D Vessels 线段树 OR Set

题意:n个碟子,第i个碟子能装a[i]水,若第i个碟子装满,则多余的水流到下一层碟子,下一层依次类推初始碟子为空,m个操作,op1:第x个碟子装p单位水,op2:询问第k个碟子有多少水.n,m法1:第i个碟子装水,二分最远能流到第x个,用线段树将i~x-1置为0.将x置为res-val.(res=sum[i~x])查询时直接query(x,x) O(nlog^2n) #

2017-07-20 11:20:30 403

原创 Codeforecs XOR On Segment 线段树(区间异或,求和)

题意:区间每个数异或X,区间求和,n,m开20个线段树,第i个维护[l,r]内第i位为1的个数即可,ans+=(1lazy标记偶数次时为0.#include using namespace std;typedef long long ll;typedef pair ii;const int N=1e5+20;const ll inf=2e15;ll n,m,a[N];st

2017-07-18 22:58:43 1329

原创 Codeforces 219D Choosing Capital for Treeland DP(Tree)

题意:n个点n-1条有向边,f[x]为把x点设为首都的代价即:要反转多少条边 使得x能达到任意一个城市.n标记边方向后 建立有根无向的树,dfs算出f[1],因为fa,u的f值只差(fa,u)这条边的方向,所以fa和son的f值相差正负1,自顶向下DP一次即可#include using namespace std;typedef long long ll;const i

2017-07-18 14:41:37 329

原创 Codeforces 401D Roman and Numbers 状压DP

题意:给出数n,m.问有多少个x 满足x%m==0 x和n包含相同的数字(无前导0,顺序可以不同)?n最多18位数字,用18位二进制表示当前状态,第i位为1则表示n的第i位数字被使用,答案为dp[(1按最后一个添加进集合的数字转移状态,注意(a[1],a[3]) (a[3],a[1])被重复计算 答案在除以每个数字出现次数的排列.#include using namesp

2017-07-18 13:04:38 346

原创 ARC 061E すぬけ君の地下鉄旅行 最短路(拆点)

题意:n点m条边的线路,每条边有编号c[i],一条路径的代价为:第一条边代价1+该路径上相邻边编号不同的对数.n,m=2e5,c[i]n的最短路?拆点:原图中u-v 编号为c,则在新图中建立u-(u,c)边权值为1,表示换线,同时(u,c)-(v,c)边权值为0则新图中相邻同一条线路花费为0,换一次线总共花费为2,跑最短路ans/2即可.#include using

2017-07-17 12:25:56 1136

原创 ARC 078F Mole and Abandoned Mine 状压DP

题意:n点m条边的无向图,删除第i条边花费c[i],问1到n只有一条路径时所需要的最小花费?n设dp[S][x] 定点1(只经过集合S中的点)只有一条路径到达x时最多能保留价值的边转移dp[S][x]时 要保证1->x路径上所有的边都是Bridge 保留c[x][u] 若其余u->S的边存在,则1->u构成多条路径   集合Y(包含x),则不能存在和S-{x}相连的边

2017-07-16 11:43:22 804

原创 ARC 058E 和風いろはちゃん 状压DP(bit)

题意:长度为N,每个元素为1~10的某一个,总共有10^N种序列,现在给出N,X,Y,Z 问有多少个长度为N的序列满足其有四个下标x,y,z,w 使得a[x]+a[x+1]..a[y-1]=X,a[y]+a[y+1]+..a[z-1]=Y,a[z]+a[z+1]+.a[w]=Z,N若找到四个下标,则剩余元素可以任意.暴力枚举第一个x出现的位置和三段的长度即可确定一类解.因为其余

2017-07-15 16:43:25 3675

原创 Codeforces 831D Office Keys 二分+贪心

题意:n个人在一条直线上,有终点p和k把钥匙,每把钥匙只能拿一次.n,k二分答案,确定时间后能得到每个人拿钥匙的范围区间[l,r],接下来就是判定每个区间是否能配到一把钥匙?因为区间长度相同 左端点排序后 最左区间拿最左钥匙即可.#include using namespace std;typedef long long ll;typedef pair ii;const

2017-07-14 13:21:04 657

原创 ARC 060F Best Representation KMP(循环节)

题意:定义一个字符串合法:当该字符串没有循环节存在,给出string s,令F=(f1,f2..fm) 满足fi为s的某一部分.f1,f2,..fm连起来为s.并且任意fi为合法|s|求最小m 利用next求出最小循环节,若f[i]=1 则m=len,若len%(len-f[len])!=0 则m=1其余有循环节情况,都可以按照前len-1个分一组,最后一个字符分一组 则m

2017-07-12 22:35:45 542

原创 Codeforces 479E Riding in a Lift DP+前缀和

点击打开链接题意:n个点1~n,初始在a点,禁止到b点,操作:每次可以从x到y点,当且仅当x!=y并且|x-y|问k次操作后能得到多少个不同的序列? n,k设dp[j][i] 从i开始,操作j次能得到的方法数mx=|i-b|-1,当mx>=1时:dp[j][i]+= dp[j-1][i-mx~i+mx]用前缀和优化到O(N^2)即可#include using n

2017-07-11 19:32:39 380

原创 ARC 060E 高橋君とホテル 倍增+二分

题意:一条直线上有n个点x[i],x[i+1]-x[i]Q次询问,问从a[j]点跳到b[j]点的最少操作次数?n对每个询问:初始为i 令l=i+1,r=b[j] 二分最远能到达的点 最坏情况下O(QNlogN) TLE..其实每次操作就是把a[i]变到最右边一个满足,r[a[i]]-a[i]每次查询就是求最少的r...r(r(a[i]))>=b[i]设r[k][

2017-07-11 15:41:59 440

原创 Codeforces 400D Dima And Bacteria 暴力+Floyd

题意:n点,m条带权边的无向图,每个顶点属于k类中的某一类,定义合法,同一类中的任意两点存在代价为0的路径,若合法,求出d[i][j]矩阵,表示第i类到第j类的最小代价.n,m同一个类有c[i]个点 则要有c[i]*(c[i]-1)/2条权值为0的路径.相同type转化时,不会经过非0边首先把边权为0两个端点扔到同一个联通分量中,算出该联通分量中每个type的个数,更新该typ

2017-07-11 10:59:08 342

原创 Codeforces 451D Count Good Substring 规律+DP

题意:当融合s中连续相同字符后,s'为回文 则s合法 例如"aabba" 融合后 "aba"给出string s,只包含字符a,b,|s|方法1:设dp[i][0/1] 以i结尾,长度为偶/奇数的合法子串个数.明显s[i]=s[i-1]时, dp[i][0]=dp[i-1][1]因为只有'a','b'两种字符 最后a结尾的回文肯定为 a,aba,ababa,abababa 

2017-07-10 16:54:57 339

原创 Codeforces 514C Watto And Mechanism 哈希

题意:给出n个string,m次询问,判断string s是否和n个string中的某一个正好有一个位置不同.n,m总的字符串长度不超过1e5正好要有一个位置不同,因为不同字符在某个位置上只有两情况,把string插入到set中 暴力枚举位置后查询 O(|s|^2logn) set比较字符串要|s|...TLE..计算string的hash值,插入到set 枚举不同位置

2017-07-10 11:08:36 504

原创 AGC 017D Game On Tree 博弈(Hackenbush删边)

题意:n个结点的树,Alice和Bob开始play,每次删除一条边,形成两连通分量,删除不包含1的那一个联通分量不能操作的人算输,n参考先考虑根结点只有一个分支时 SG(g)=SG(g')+1要证明:g的后继状态的SG值为0~SG(g') 以树中结点个数作为阶段 归纳法证明 一个结点和两个结点显然成立,去掉g-g'边得到SG(g)=0去掉g'中的边 子树g'后继的SG为

2017-07-10 09:57:04 991

原创 ARC 059F バイナリハック DP

题意:三种操作:添加0或者1到字符末尾,删除最右字符(若字符为空,则不变) 给出string s 问有多少种长度为N的操作,能得到s n,|s|长度为L的串 共有2^L种 因为每种出现的概率相同,所以每种的方法数也相同设dp[i][j] i次操作构成长度为j的string的方案数ans=dp[n][L] / 2^L.#include using namespace s

2017-07-09 13:02:13 916

原创 ARC 059E Children and Candies DP

题意:N个人,C个糖果,每个人有性质xi,若第i个人分到a个糖果,则其高兴度为x[i]^a..n个人的高兴度定义为:n个人高兴度的乘积,f(x1,x2,..xn):为所有分配方案的累加和现在每个人的性质x[i]范围为a[i]~b[i] N,C设dp[i][j] i个人分j个苹果的所有方案的累加和所有方案的累加和 分类统计 考虑第i个人分到多少苹果.当第i个人分到m个苹果 则前面

2017-07-08 22:02:21 620

原创 Codeforces 358D Dima And Hares DP

点击打开链接题意:n件物品,每件物品只选一次,选的顺序不同 获得的价值也不同,选一件物品时,其相邻两件没选价值为a[i],相邻两件选了一件时价值为b[i],相邻两件都被选时价值为c[i]n每件物品有3种状态,根据其相邻选择顺序来确定其状态.注意边界关系..设dp[i][0/1][s] 前i列 最后一列状态为s && 最后一列比前一列早/晚选 #include us

2017-07-08 14:41:38 352

原创 Codeforecs 439D Devu and his Brother 三分

点击打开链接题意:给出两个序列a,b 操作:使某个元素增加1或者减少1 问使序列a中最小值>=序列b中最大值的最少操作次数? n,mf(x) x增加 前半部分增加 后半部分减小. 最极大和极小时,f(x)都较大,猜f(x)为凸函数.Proof: f(x)求导  f'(x)=cnt-num  (cnt为a中小于x的个数,num为b中大于x的个数) x增大,f'(x

2017-07-07 22:04:27 264

原创 Codeforecs 359D Pair of Numbers 单调栈 OR ST表+二分

点击打开链接题意:n个数a[i],找到最长的一段区间[l,r],存在l如果最大长度有多个,输出所有开头. n法1:枚举a[j] 处理出a[j]的左右边界即可.因为a|b b|c 所以a|c 用单调栈处理边界 O(n)法2:[l,r]中的a[j]为 min(a[l],a[l+1]..a[r]) 要和gcd(a[l]..a[r]) 相等 预处理出min和gc

2017-07-07 09:30:23 375

原创 Codeforces 296D Greg And Graph (逆向处理)Floyd

点击打开链接题意:n个点的有向带权完全图,第i次删除一个点及其所有的边,n  ? 逆着考虑:相当于每次添加一个结点后,在更新最短路径.O(n^3)对第m个新加入的点x,n^2更新x(出发/结尾)时中间点编号为后m+1个的d^(m+1)值 在n^2更更新中间点为x时的d^m值即可.#include using namespace std;typedef long lo

2017-07-06 20:02:32 384

原创 Codeforces 600E Lomsat gelral 树上启发式合并

点击打开链接题意:n个结点的树,每个结点颜色为c[i].n启发式合并:一个元素从一个集合被加入另一个集合时, 所在集合的规模至少扩大一倍. 如果没有分离操作且元素数目有限, 合并的次数是logn的.设两个map:col[u][x] 子树u中颜色x的出现次数,sum[u][x] 子树u中出现次数为x的颜色之和dfs时,根据u的子树v来更新col[u][x],暴力更新O(n^2

2017-07-06 11:45:59 593

原创 Codeforces 265D Good Sequences 贪心+DP

点击打开链接题意:n个合法的数a[i],从其中选出k个数满足,a[i]1 问k最大为?n,a[i]O(nlogn)晒出a[i]的素因子,设d[x]:以x结尾的最长合法序列,根据di=gcd(a[i],a[i-1])转移状态a[i-1]:为a[i]某个素因子的倍数 a[i-1]=k*v[i]贪心取最大的一个显然最优.因为d[kx]>=d[x](kx存在时)用f[x]记录当

2017-07-05 18:24:45 407

原创 Codeforces 448C Painiting Fance 分治

点击打开链接题意:n个高度a[i]参差不齐的矩形,宽度都为1排列在一条直线上,有宽度为1的刷子,每次可以垂直或者水平刷一次,不能刷空白的位置.n竖着刷ans次 ans每次能横刷的最大次数为min(a[1]-x,a[2]-x,...a[n]-x) x为已经刷的行.每次横刷后 n个矩形 某些列为0 这些0列 把[l,r]分成不相交的块,这些块和原问题性质相同 递归求解即可每次扫

2017-07-05 11:51:25 496

原创 Codeforces 275D Zero Tree 树形DP+贪心

点击打开链接题意:n个结点的树,每个结点有权值v[i],操作:选以1为根的子树,使子树上的点全部+1/-1.n贪心:先使叶子结点变0最优,否则非叶子点先变0,由于之后要操作其叶子,又会变为非0总的操作数为结点1的加减次数,设dp[u][0/1] u为根子树全为0时 u的加/减次数例如:u的子节点v1,v2需要加3,5次 则只需要5次+操作 前三次(v1,v2),

2017-07-02 13:39:03 384

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除