CF2074EFG
大概率只有自己能看懂的题解,只是简单记录一下
CF2074E
#随机化 #随机数生成
生成随机数的代码: mt19937 rng(clock() + time(0));
CF2074F
#线段树 #二分 #分块 #暴力
题意:给你一个 a\times b 的矩形,你需要用边长为 2^k 的正方形覆盖它,问最少用多少个正方形可以恰好覆盖
思路:把 a\times b 的矩阵拆分成两个维度来看,把 a 和 b 分别拆分成一堆 2^k 长度的段,然后枚举 x 和 y 上所有拆分出来的段,计算答案即可,这里切分需要用到线段树的思想
CF2074G
#多边形DP #区间DP #处理环形
题意:给你一个多边形,你可以选择三个顶点,并且得到三个顶点乘积的值,目标是最大化得到的值,但是你不能选择三个顶点形成的三角形与先前的三角形重叠
思路:考虑区间 DP,在 [0,n-1] 区间内做 DP,我们需要枚举每一个区间中的一个点,作为 l,r 以外的第三点 k 去构成一个三角形。选中点后,区间就可以被拆成两个区间 [l + 1,k] 和 [k + 1, r] ,这里就可以引出状态转移方程:
dp[L,R]=max(dp[L,k-1]+dp[k+1][R]+score(L,R,K), dp[L,R])
区间 DP 的套路:
我们要得到一个长区间的值,就需要先计算出所有小区间的值,在 for 循环中怎么去实现呢?
最终的答案就是 dp[0][n - 1]