CF710E Generate a String 题解

一道比较不错的 DP。

fi 表示当前字符串长为 i 时的最小代价,发现这道题麻烦的地方在于 fi 可以从 fi+1 的地方转移过来。

分类讨论一下:


i 为偶数:

i 为偶数时 fi 能从 fi1,fi2,fi+1 三个点转移过来,但是 fi+1 的转移路程是 ?fi+22fi+2fi+1fi
,总代价是 y+2x,这显然不如 ?fi+22fi2fi 更优,总代价是 y+x

所以 i 为偶数的转移方程是 fi=min{fi1+x,fi2+y}


i 为奇数:

i 为奇数时 fi 能从 fi1,fi+1 转移过来,接下来讨论 fi+1 的转移思路。

显然 fi+1 不能从 fi 转移,于是只能从 fi+2,fi+12 转移,发现 fi+2 又是个奇数,因此如果从 fi+2 转移的话路径只能是这样:

?fi+12fi+32fi+3fi+2fi+1fi

总代价是 4x+y,显然不如从 fi+1 的转移路径 ?fi+12fi+1fi,总代价是 y+x

所以 i 为奇数的转移方程是 fi=min{fi1+x,fi+12+x+y}


所以最后的方程就是上面两个式子综合一下就好了。

Code:GitHub CodeBase-of-Plozia CF710E Generate a String.cpp

posted @   Plozia  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示