您的位置:首页 > 编程语言

[置顶] 一句话详细题解+优质题目及其博客(清真代码)链接 (持续更新)+知识点讲解汇总

2017-10-17 16:34 513 查看

CODEVS

NOI2002 贪吃的九头蛇 codevs 1746

题解:树形DP,发现当”小头”大于等于2的时候,我们可以让小头们交替地去吃果子,比如son让小头A吃,可以让小头B吃father,让小头A吃grandfather,再让小头B吃grandgrandfather…所以我们发现其实只和”大头”吃那些点有关,所以我们定义dp[i][j][k]表示当前在位置i,i的子树里面大头吃j个,其中位置i的大头吃不吃,于是我们先多叉树转二叉树,然后跑树上DP即可

22ssm的题解

BZOJ

BZOJ2321 [BeiJing2011集训] 星器

题解:这题神了,考场上根本想不出来的解法(不过运气好还是能找规律找出来),显然牵扯到能量,自然联想到能量守恒定律,初始能量总和减去末尾能量总和就是释放的能量,于是我们发现可以定义一个点的欧几里得距离的平方的和为势能,也就是一个点的能量为x2+y2,前势能总和减去后势能总和就可以得到答案了,神题…

popoQQQ大爷的题解

BZOJ 3140 [HNOI 2013] 消毒

题解:这题有意思的,状压+二分图匹配,好好玩儿呀

可以发现,我们可以一层一层地选取,如果我们把一层全部选了的话,只用花费1的代价

由于a∗b∗c<=5000,所以最短的边最大是17,因此我们把最短的边找出来,作为高,所以我们只需要二进制枚举横着切那些层,然后剩下的所有我们竖着处理,竖着一层一层地切,于是我们把剩下的”压”下来,压成一层,然后跑匈牙利即可233

qpswwww的题解

BZOJ3594 [SCOI2014方伯伯的玉米田]

题解:二维树状数组优化DP,显然对于一段区间+1的操作,我们每次+1的时候,右端点都应该是末尾,否则只有可能让答案变少而不会变多,所以我们只需要定义

dp[i][j]表示前i个数,在这i个数中,左端点已经被选了j次的答案,则有

dp[i][j]=max(dp[x][y])+1

其中x,y分别小于和小于等于i,j,并且满足a[x]+y<=a[i]+j

于是我们二维树状数组维护一下,更新的时候查询即可

Oxer的题解

BZOJ3712 [PA2014] Fiolki

题解:LCA+sort,显然我们可以发现这是一个树形结构(反正我自己看的时候并不显然),我先按照添加顺序建树,建树的方式是现在有一排叶节点,然后如果要让1号杯倒到2号杯,就构建一个1号,2号的LCA出来,然后LCA作为新的2号杯,表示合并到了2号杯上面,注意,最开始是没有边相连的叶节点,然后这个树建出来我们可以发现是森林,然后两个点的LCA的深度可以代表反应时间,也就是说什么时候这两个东西混合到一起了,深度深的自然先混合到一起,深度浅的自然后混合到一起,然后我们记录森林的标记,这一棵树标记成1,另一棵树标记为2…对于沉淀优先级的那些个数组,我们可以按照森林来处理,这棵树上,如果有两个满足沉淀的都在这棵树,那显然就可可能可以沉淀,于是我们把所有可能沉淀的情况都找出来,然后按照他们的LCA的dep值排序,深的先发生,晚的后发生,如果dep相同,再按照本来的沉淀顺序排序,这样一来,按照排序之后的数组来模拟就可以得到这棵树的答案了,把森林里所有树的答案加起来就是总答案

w4149的题解

BZOJ 4197 [ NOI2015 ] 寿司晚宴

题解:非常好的状压题,注意到n最大为500,小于等于500−−−√的貌似只有8个,而一个数,如果包含大于500−−−√的因数,则一定只包含一个,于是我们记录每个数分解之后包含的超过500−−−√的数,如果没有就记录为1。这样一来我们就可以根据超过500−−−√的数来拍个序然后dp,好像不是很能讲清楚,状压的内容:如果从右至左第一位是1,表示含有2,第二位是1,代表含有3,第三位是1,代表含有5,也就是说把这个数唯一分解之后的素数状态压缩起来,转移的话貌似还有一些复杂,用dp[i][j][k]表示第i个人(i只能为1或者2)选完,他的状态是j,另一个人状态是k的方案书,自然f[i][j]应该为这两者之和

sunshinezff的题解

BZOJ 4950 [ Wf2017 ] Mission Improbable

题解:二分图,建图非常巧妙,我们考虑一下可以发现其实要让视图一样的话,我们只需要保证每一列的最大值和每一行的最大值不变,并且不能选俯视图里空白的位置,就可以随便偷东西了,于是我们可以建二分图,具体的建法是如果某一行和某一列的分别的最大值相等,则这一行这一列连边,表示这一行这一列可以共用一个最高的,当然如果这一行这一列所交的那个位置俯视图没有的话,那么我们就不能建这条边,于是我们跑出来之后就是我们最少要放的物品,再按照俯视图把该填的地方填成1,最后用总和去减去最少放的就是最多偷的东西啦

w4149的题解

Others

题目描述

题解:把其看成n∗m个物品然后变成了普通的期望问题

初探猜数游戏思路

猜数游戏加强壹

猜数游戏加强贰

猜数游戏加强叁 [BZOJ1962]

题解:这道题显然是把猜数游戏壹和猜数游戏贰结合起来了,于是我们可以直接得出递推式

dp[i][j]=max(dp[i−1][j]+dp[i−2][j−2],dp[i−2][j]+dp[i−1][j−1])+1

看起来貌似有点复杂,其实很简单,我们可以这样思考,第一次猜数猜完之后,由于我们不知道答案,只能在第一次猜的数的左边或者右边去猜一个数,如果猜对了左右,那么应该是dp[i−1][j]表示猜了一次之后,还没有得罪人所能处理的最长长度,而dp[i−2][j−2]的含义则是我第一次猜了之后第二次又猜,但是第二次猜错了,导致我用了两次机会还得罪了两次,然而我们可以发现,其实x的位置是对我们的答案有影响的,所以我们应该讨论x在猜的y的左右的最坏情况,因此取max

另类猜数游戏壹

另类猜数游戏贰

猜数问题系列参考文献 2006年冬令营讲座 [雅礼 龙凡]

车站分级加强版

加强版数据信息:n,m<=100000,一共输入不超过100000个停靠车站

题解

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: