CF DP 题乱做(续更)

CF566F

1500

容易考虑到 n2 做法:设 dpi 为第 i 个数选的答案,对于排好序的序列,枚举前面的数 aj,如果 aj|ai 就转移,时间复杂度易知 O(n2+nlogn)

由于 a 至于很小,延续刚才的思路,设 dpi 为选i 的答案。那么她可以更新她的所有倍数,枚举倍数即可。

考虑到 ai 互不相同(我也不知道怎么知道这个条件的,但是不去重直接算能过),那么极端情况就是 ni=1ni=nlogn 所以可以通过。

CF264B

1500

容易写出 dpi 记录选第 i 个数的答案,可以由 j 满足 gcd(ai,aj)>1 转移过来。

但这太慢了,考虑我提前搜出来每个数的因数,同时维护一个 fi 表示因数为 i 能得到的最大贡献,这样大大减少了枚举数量,可以通过此题。

有转移:

dpi=maxfj+1

CF474D

1700

设计 dpi 为长度为 i 的方案数,那么她要么是 0,要么是 1,如果是 0,那么她的上一位就没限制,所以从 i1 转移过来;是 1,那么前 k 位就都得是 1,所以在此区间只有一种方案,所以应从 ik 转移过来。

有:dpi=dpi1+dpik×[ik]

初始化 dp0=1

前缀和一下即可。

CF580D

1700

看数据范围可知是状压,考虑 dpS,i 为吃了 S 集合里的,最后吃的是 i

枚举集合 S,记录 popcount,如果刚好是 m,统计一轮答案。如果比 m 小,则有转移:

dpS+i,i=maxdpS+i,i,dpS,j+ai+cj,i

枚举 i 是接下来要吃的,j 是刚刚吃完的。

时间复杂度 $O(n22n+n+k)$ 可以通过此题。

CF1635D

1800

考虑把这些数当做二进制处理,对 1e5p 来讲更加友善。

那么对于她讲的这两个操作,本质就是要么在二进制末尾添加一个 1,要么就在后面添加两个 0

那么得到转移 fi=fi1+fi2,总方案数就是求和,那么就是求一个 fib 部分和。

考虑多算了一些东西,就是有可能一个大数是可以由一个小数变化而来的,那么就不应该计算她,因为是重复的。考虑从小到大排完序后,每次暴力的去模拟往前找,如果找到了一个已经存在的,说明她是可以被前面的变化过来的,就把她删了好了。

最后数一数她有多少位,加起来就好了。时间复杂度 O(n+p+nlogn),当然我知道,fib 前缀和可以做 logp,在此不赘述,毕竟 1e5 没必要。

CF41D

1900

考虑设 dpi,j,k 为到 (i,j) 时能否收集 k 个豌豆。

那么就有转移方程:

dpi,j,k=dpi+1,j1,kai,j or dpi+1,j+1,kai,j

初始化 dpn+1,i,0=1

从大到小枚举倍数,找可以达成的位置,找到了从下到上输出方案即可。

CF1627D

1900

gcd(gcd(a,b),c)=gcd(a,b,c),所以我生成了一个 gcd 后,拿着她去跟别的生成的 gcd 就是她们本身全体的 gcd,由此,问题被简化成了在这个序列里乱选一些数,能得到多少个不同的 gcd。当然,肯定不会同一个数选择多次,因为这样不会有贡献。

那么考虑直接暴力计算那些数是可以被若干次 gcd 凑出来的。我们发现一个数的若干个倍数的 gcd 可能是她本身(当然也有可能是她的倍数),那我们就枚举她的已经存在的倍数,全 gcd 起来,判断是不是她本身且她不在原有集合里就可以记录答案,因为调和级数是 log,所以时间复杂度 O(nlogn)

CF295C

2100

考虑设 dpi,j,k 记录第 i 轮划船岸上有 j100 斤, k50 斤 的方案数。

显然,若某一时刻 dpi,0,0 有值,那么就输出。

转移为:枚举一次运输了 a100 斤,b50

对于去:

dpi,j,k=calc(x,a,y,b)×dpi1,ja,kb

对于回:

dpi+1,j,k=calc(x,a,y,b)×dpi,j+a,k+b

我们有函数 calc(x,a,y,b)=(xa)(yb)

CF1650F

2200

考虑 01 背包,考虑到数据范围,我们设时间为价值,百分比为容量,那么容量就从 0200,对于每个任务做背包,然后看在规定时间内能否完成任务,即是否有 100 以上有值。按常规套路输出方案即可。

有状态转移:dpi,j=mindpi,j,dpi+1,jpi+ti

这个题细节比较多,尤其注意初始化时不要用 memset,否则会超时。

posted @   Obvicat  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示