dp
Prgl
这个作者很懒,什么都没留下…
展开
-
2020ICPC上海站 C. Sum of Log
题目大意:给定T组X,Y,对于每组X,Y,求上面式子的值,其中当x为真时等于1,其他情况等于0.其中。思路:对X,Y一起进行数位DP,我们把每一位枚举数字的上限以及数字之前是否有前导零(当X,Y枚举到这一位二者都有前导零时才为true)都直接记录到这一位的状态里面,然后在枚举每一位的时候,枚举X,Y在这一位上面所有可能的组合(i,j)。如果i&j为1,那么X&Y就一定不为0,便不会对答案产生贡献,这种情况下的后面若干位就不用枚举了。否则,对答案产生了贡献,由于在X&a...原创 2021-11-01 21:05:03 · 184 阅读 · 0 评论 -
AcWing 324. 贿赂FIPA
思路:先由附庸关系建树,额外建一个花费为0的节点为树根。考虑树形DP,设dp[i][j]为在以i为根的子树中,得到不少于j张票的最小花费。于是可以从每个子节点向根节点转移,参考分组背包的转移方式,设当前节点为v,子节点为u,size[v]为以v为根的子树大小,开始处理v时dp[v][0]=0,其余dp[v][i]=inf,于是可以得到dp[v][j]=min{dp[v][j-k]+dp[u][k]}(j<=size[v],k<=size[u],j>=k)。此外还要注意,因为...原创 2021-10-24 17:54:23 · 119 阅读 · 0 评论 -
AcWing 325. 计算机
传送门题目大意:一棵无根树,每条边有一个距离,求每个顶点到距离其最远的顶点的距离。思路:考虑树形DP+换根。令D[x]x到以x为根的子树当中的最长距离,d[x]为次长距离,U[x]为x向上走的最长距离,F[x]为x的答案。第一次dfs以1为根可以很容易求出D[x]与d[x]。之后第二次dfs对每个顶点去求最终的答案。令p为父节点,v为当前节点,l为p到v的距离,于是有F[x]=max(D[x],U[x])对于D[p] == D[v] + l的情况,说明p向下的最长距离原创 2021-10-26 21:48:06 · 91 阅读 · 0 评论 -
AcWing 288. 休息时间
传送门思路:考虑DP,设dp[i][j][1]为牛在前小时休息j个小时且第i个小时休息时,回复的最多体力;dp[i][j][0]为牛在前小时休息j个小时且第i个小时没有休息时,回复的最多体力。可以把问题分为两部分,首先考虑当牛不能跨天休息时,在第一个小时休息必然无法恢复体力,有dp[1][1][1]=0,dp[i][0][0]=0,其他皆初始为-inf。于是有dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]),dp[i][j][1]=max(dp[i-1原创 2021-10-28 19:47:05 · 115 阅读 · 0 评论 -
Codeforces Round #750 (Div. 2) E. Pchelyonok and Segments
传送门题目大意:给一个序列,可以在这个序列中从左至右选若干个段,第i段的长度为i,对于任意的段i,段内元素和S[i]<S[i+1],求在该序列中最多可以选出几段。思路:设dp[i][j]为从Ai个到第An个数中可以取j段满足条件时能达到的第一段sum的最大值我们从后往前dp,一开始dp[N][1]=A[N],其他初始为0,当j=1时,显然有,dp[i][1]=max(A[i],dp[i+1][1])。对于其他情况,设sum=A[i]+A[i+1]+...+A[i+j-1],如果dp原创 2021-10-28 23:20:38 · 131 阅读 · 0 评论 -
AcWing 289. 环路运输
传送门思路:一个环路上的问题,考虑拆环为链然后复制一倍接在后面。那么对于Ai与Aj,不妨设j<i,如果i-j>N/2则两者距离在新的链上就是i-j,而如果i-j<=N/2那么两者之间的距离就是j+N-i=N-(i-j),而这个值<=N/2,所以二者的距离在新的链上一定不超过N/2。设新的链上两个物品为Ax与Ay,设y<x,可能的答案为Ax+Ay+x-y=Ax+x+Ay-y,所以我们可以枚举x,用单调队列维护一下Ay-y,其在队列内单调递减,就可以求出答案了。代.原创 2021-10-28 21:57:12 · 163 阅读 · 0 评论