2019.8.summary

2019.8.1
BZOJ4664: Count
我去,这道题想了两天终于想明白了QAQ
好题啊……!
首先肯定从小到大的放,
dp[i][j][k][0/1/2]表示放了前i个数,这些数被分成了j个段,贡献和为k,整个序列的两边有几个能填数
因为如果直接把统计每一个数的贡献,可能会出现负数
所以我们给每一段的两端(两个边界看第四维)都加上h[i]-h[i-1],相当于把那个数提到了h[i],保证了无论在哪插数,两边的数都被提到了h[i-1]
原理就是排好序以后h[i]-h[j]=(h[i]-h[i-1])+(h[i-1]-h[i-2])+……+(h[j+1]-h[j])

BZOJ4985: 评分
真妙……QAQ
首先在这n个数里二分
怎么验证呢?把>=mid的看成1,否则看成0
f[]表示把这 一 位 变成1需要几个n-m中位置不能确定的
如果是位置确定的f[i]=(d[i]>=mid)?0:INF
其余的全置为1
然后模拟队列的过程,从头取3个,然后如果想让插入到队尾的合法,这三个中就至少要有两个合法
选f最小的两个相加插到队尾
最后剩下的一个就是剩下一个数>=mid所需要多少个不确定位置的数
如果它等于INF就是无解,否则和n-m比较

BZOJ1642: [Usaco2007 Nov]Milking Time 挤奶时间
煞笔题吧,先把任务排序,f[i]完成任务i后能获得的最大收益


2019.8.2
BZOJ5336: [TJOI2018]party
好题,dp of dp(dp套dp)
考虑lcs的dp,如果i固定,那么相邻两个j相差要么是0要么是1对吧,所以就可以把它差分一下压成一个m位的2进制数
预处理出现在的lcs状态为S,再加了一个字符以后新的状态是什么
然后f[i][S][k]表示如果填了前i个,lcs状态为S,已经NOI三个数匹配了k个的方案数,枚举下一位填什么dp即可

BZOJ1820: [JSOI2010]Express Service 快递服务
我们可以按着顺序考虑每一个任务我们派哪一辆车去
f[i][j][k][t]表示安排了前i个任务,三辆车分别在j,k,t
因为三辆车里至少有一辆再上一个任务地点,所以省掉了一重,就可以过了


2019.8.3
BZOJ4055: [Ctsc2015]misc
好题啊……真的挺难的,做法也挺有启发性的
可以枚举一个端点,然后建出最短路DAG图,然后按逆topo序跑(显然对吧)类似前缀和的每次乘上路径宽度瞎搞一下?
感觉描述的不太好,还是代码比较清晰吧
https://www.cnblogs.com/ZH-comld/p/10816244.html

BZOJ1899: [Zjoi2004]Lunch 午餐
这种题都是按吃饭的慢的先打饭……反证法显然
有两个口那就dp两个口打饭时间,发现它两的和显然和当前打饭人打饭用的时间的前缀和相同

BZOJ1746: [Usaco2005 open]Lazy Cows
好题!首先思路我都没想到……更别说各种毒瘤的细节了QAQ
看了一个solution:https://blog.csdn.net/Devil_Gary/article/details/78272425
感觉思路很巧妙,先把它离散化,然后dp,两行所以有四种情况
在转移的时候特别容易漏情况,应该先在草稿纸上瞎画画,想清楚以后再写

BZOJ1688: [Usaco2005 Open]Disease Manangement 疾病管理
瞎搞一个状压dp,类似背包即可

BZOJ3687: 简单题
对于这种子集的题,显然不可暴力穷举,因为Σai不大,说明子集的最大和也就那么大
所以我们维护每一个子集和出现奇数次还是偶数次,bitset维护爽爆啊……

BZOJ4806: 炮
同AHOI2009中国象棋

BZOJ2287: 【POJ Challenge】消失之物
据说跑n次背包能拿90pts?……
跑一次背包,然后一行一行处理
每一行都是丢掉同一个物品,只是背包大小不一样
我们做背包的时候是f[i]+=f[i-a[j]],这里我们按从小到大的顺序f[i]-=f[i-a[j]]就行啦


2019.8.4
BZOJ3591: 最长上升子序列
好妙……状压dp,不过是三进制压位QAQ(吐槽,谁能想到把做lis的单调栈给状压了呢……)
0,1,2分别表示每一个数没考虑过,考虑过且在单调栈里,考虑过且不在单调栈里
因为是单调栈,在单调栈里的肯定按顺序啊
转移我们只要枚举考虑不在单调栈里的数,如果他是限定的lis的话,要求它的前一个数一定要被考虑过
并且添加完这个数以后lis<=k即可,
在所有数都考虑了的时候我们统计答案,这样我们一定能保证最后lis长度=k且所有数都考虑了

BZOJ4767: 两双手
显然可以列出一个方程,因为题目保证了分母不为0,显然有唯一解
也就是说两种操作需要的次数都是固定的,那么我们可以容斥一下
我们先把每个点直接记录为两个操作各需要多少次
然后把所有点排序,f[i]表示从原点到第i个点,不经过其他点的方案数
直接容斥,我们枚举经过的第一个阻碍点,然后从第一个阻碍点到当前点随便走,
用总方案一减就好辣
P.S题目只讲了EX,EY的绝对值在500以内,没说阻碍点的……贼坑啊……


2019.8.5
BZOJ4987: Tree
挺神的一道题吧,就是首先第一步都想不到的那种
最优的方案肯定是只有一条链只走一遍,然后在这条链上要往某一个支路走然后再回到这条链(也就是支路走两遍)
所以f[i][j][0/1/2]表示i这棵子树,选了j个点,子树内有0/1/2个那条链的端点
每dfs一个子树后合并一次,除非这个子树里有1个端点,不然这条路要走两次(YY一下)

BZOJ4742: [Usaco2016 Dec]Team Building
刚看到BYF都590+题了,我还不到500……QAQ
这是一道dp题,先把两个序列排序
f[i][j][r]表示第一序列考虑了前i个,第二个序列考虑了前j个,选出了r对的方案数
用f[i][j][r]更新f[i+1][j][r],f[i][j+1][r]表示不选对吧
考虑到f[i+1][j][r]和f[i][j+1][r]都会更新f[i+1][j+1][r]这里就有一个f[i][j][r]重复了对吧,要减掉,这里不容易想到,就GG了
如果a[i+1]>b[j+1]还要更新f[i+1][j+1][r+1]

BZOJ1578: [Usaco2009 Feb]Stock Market 股票市场
代码简单却不太好想,怕怕QAQ
我们可以默认每天买的股票第二天就卖掉(不卖就看成卖掉了又买入)
所以每天的决策就互不相关了,可以看成把前一天的前第二天最多可以变成多少钱
做d次完全背包即可


2019.8.7
BZOJ2554: Color
好题!!!https://www.cnblogs.com/liu-runda/p/6803126.html
一开始不明白最后的比重为啥是(i-1)/2i和(i+1)/2i
然后爷稳稳跟我讲了一下,明白啦
条件概率
变成i-1的概率是1/2
从i-1变成全白的概率是(i-1)/n,一乘就是(i-1)/2n
然后在比上两个的和就好了


2019.8.11
BZOJ5289: [Hnoi2018]排列
推一推发现a[i]号点必须要在i号点之前被选,连边,如果不是以0为根的树就无解
否则用堆维护,对于全局最小值,选完父亲以后肯定立马选他,合并一下
合并以后用平均值继续比较
因为堆要支持修改,可以做tag,堆顶如果和tag不一样就continue


2019.8.12
修了一下CF的题,以后能用kmp尽量不用hash啊,好多人被卡了
但是第四题没有写出来枚举每一行,它对某一个矩形里的点是有贡献的,这个可以用二维的差分来维护一下啊QAQ我好naive啊


2019.8.13
BZOJ4238: 电压
周润龙讲课的时候讲到过QAQ
有一个细节就是因为有重边,所以你不能根据要搜的节点是不是father,应该是要搜的这条边是不是你从father搜过来的那条边对应的边

BZOJ1977: [BeiJing2010组队]次小生成树 Tree
严格次小生成树肯定是用最小生成树换一条边的,我们枚举换成了哪条非树边
然后换掉的肯定是这两个点直接的最长边(如果一样就换次长边)
倍增维护最大和次大即可(次大的时候要想想别漏了)

BZOJ1217: [HNOI2003]消防局的设立
明显贪心,本来都准备粘代码了,果然要自己写QAQ
调了一个晚上,距离一个<=2的点除了子孙,父亲爷爷,还有父亲的其他儿子QAQ


2019.8.14
luoguP1967 货车运输
跟某天模拟赛几乎一样QAQ那天少打了一处100->0
这题还调了一会因为我倍增预处理那里老是把x达成i


2019.8.16
BZOJ4719: [Noip2016]天天爱跑步
挺好的题啊!
把一条路径分成左端点到lca和lca到右端点(最后如果lca对左端点有贡献,要把lca的ans–,因为这时候它在第二条路径那里肯定也统计了一次)
然后考虑差分,细节就不说了。
应该先把子孙dfs完再把当前节点作为左/右端点的贡献加上,然后统计答案,最后再把当前节点作为lca的贡献减掉,这个也YY了许久QAQ
一开始我想一个节点可能对许多点有贡献,到底tag的是哪个呢,后来发现naive了,直接vector就行了……
好像倍增预处理跟上题一样还错了(捂脸)


2019.8.17
luoguP3953 逛公园
策爷的神题,用心体会了一下
正着跑过最短路以后应该倒着记搜

luoguP1850 换教室
dp一下,可能是我唯一一道会做的期望dp?(smog)

luoguP2827 蚯蚓
我只会优先队列的QAQ
题解里说的很对,要不断的理解题意然后找到隐藏的性质,这也是我所欠缺的
可以发现先切的切完后肯定要比后切的切完后长,所以它本身就有一个单调性
然后拿三个数组维护一下就行了


2019.8.18
luoguP5022 旅行
把每一个点能到达的点排个序
枚举断边,然后卡卡常QAQ?

luoguP5021 赛道修建
其实如果会了聪聪可可的树形dp写法这题应该就会了QAQ,但是我以前咋那么菜啊QAQ
multiset维护即可吧……QAQ


2019.8.19
CF1206D
显然如果n>3*60答案肯定就是3
否则暴力建图,然后Floyd找最小环,学习了


2019.8.22
CF1204E
好题啊!QAQ
跟卡特兰数相关,然后dp一下


2019.8.23
BZOJ1520: [POI2006]Szk-Schools
裸的费用流

BZOJ2527: [Poi2011]Meteors
没有想到是整体二分
可能是因为他每一个国家是独立的
注意:整体二分里面对于要分到后一半的部分,要减掉前一半对它的贡献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值