dp
吹梦到西周啊啊啊
纵有千古,横有八荒;前途似海,来日方长。
展开
-
CF1459D.Glass Half Spilled(DP)
D. Glass Half Spilled题解:对于每个kkk,假设SSS为选取的杯子集合,SaS_aSa为选取杯子的总容量,SbS_bSb为选取杯子的当前水量,BBB为全部杯子中的总水量,为使这kkk个杯子的水量最多,最优的选择是将其他杯子中的水全部倒入这kkk个杯子中,结果为min(Sa,B/2+Sb/2)min(S_a,B/2+S_b/2)min(Sa,B/2+Sb/2)。根据这个式子可以得知,当SaS_aSa确定时,SbS_bSb越大一定不会使结果变劣。问题就转变为,选取kkk个杯原创 2020-12-21 16:04:03 · 452 阅读 · 0 评论 -
CF1452D. Radio Towers(DP)
Radio Towers题意:有一个长为n的线段,每个点设置被信号塔的概率为0.5,每个信号塔可以覆盖一个以自己为中心的奇数线段,覆盖范围不可重叠,请问存在解的概率题解:每个位置都有等概率设置或不设置,共有2n2^n2n种情况,且等概率关建点是求有多少情况可以存在解考虑DP,枚举前面的合法状态去更新,因为必须是奇数段,所以就是前-1,-3,-5…的情况数之和,这个和可以用前缀和来维护,注意奇偶需要分开之后就费马小定理求逆元就行了Code:#include<bits/stdc++.h&原创 2020-12-01 22:25:43 · 254 阅读 · 0 评论 -
CF467C. George and Job(前缀和+DP)
George and Job题意:给定一个数组,从中选择k个长为m的子段(不重叠),使和最大分析:f(i,j) 前i个数中选j个长为m的子段转移方程:当前i不选,继续沿用i-1的值 或者 选最后m个组成一个子序列dp[i][j]=max(dp[i−1][j],dp[i−m][j−1]+sum[i]−sum[i−m])dp[i][j]=max(dp[i-1][j],dp[i-m][j-1]+sum[i]-sum[i-m])dp[i][j]=max(dp[i−1][j],dp[i−m][j−1]+su原创 2020-05-27 22:21:56 · 264 阅读 · 0 评论 -
CF118D Caesar‘s Legions(dp)
Caesar’s Legions题意:将n1个0和n2个1排列,最多允许k1个0或k2个1连续,求排列数分析:1.显然还是线性dp(反正是dp,是不是线性不清楚)2.最开始的想法:f(i,j,k) 长度为i的排序,以j结尾,最后连续k个j,后来发现转移方程很复杂,遂放弃3.f(i,j,k,l) 选i个0,j个1,最后连续k个l,以l结尾,虽然转移方程还是有一点点复杂,但至少我能实现了(还是我太菜了)4.转移方程分为k=1和k>1两种情况:a. k=1时 以0结尾为例 dp[i][j][原创 2020-05-22 22:09:50 · 271 阅读 · 0 评论 -
CF706C Hard problem(dp)
Hard problem题意:给定n个字符串,每个字符串翻转需要花费一定的费用,要使所有字符串呈字典序输出(即:s1<=s2。。。。。)且花费最少分析:1.显然线性dp2.f(i,0) 为第i个不翻转,前i个达成字典序的最小费用;f(i,1) 为第1个翻转,前i个达成字典序的最小费用3.分四种情况更新dp,第i-1个字符串和第i个字符串分别翻或不翻4.注意费用较大会爆intCode:#include <bits/stdc++.h>using namespace std;原创 2020-05-21 22:49:43 · 302 阅读 · 0 评论 -
2020牛客寒假算法基础集训营2 C-算概率(dp)
题目传送挖坑待补。。。原创 2020-02-07 14:18:14 · 133 阅读 · 0 评论