BZOJ 1079: [SCOI2008]着色方案(巧妙的dp)
题意
有个木块排成一行,从左到右依次编号为~。你有种颜色的油漆,其中第种颜色的油漆足够涂个木块。所有油漆刚好足够涂满所有木块,即。统计任意两个相邻木块颜色不同的着色方案。( ,)
题解
特别巧妙的dp!一开始容易想到用时间复杂度做法QAQ,并没有什么用。
但是可以启发我们也许可以用算法去解决问题。然而我还是不会。。
我就看了一下别人的博客2333 发现dp很巧妙
我们可以存储剩余能涂个木块的油漆还剩多少种。这样时空复杂度就都降到了。
所以就有dp[a][b][c][d][e]
来记录答案(a,b,c,d,e
分别表示1,2,3,4,5
的种数),所以就有
dp[a][b][c][d][e] = dp[a - 1][b][c][d][e] * a + dp[a + 1][b - 1][c][d][e] * b + dp[a][b + 1][c - 1][d][e] * c + dp[a][b][c + 1][d - 1][e] * d + dp[a][b][c][d + 1][e - 1] * e;
(之间的+1,-1
就是前面一种颜料从能涂q
块,变成q-1
了)
但这并不符合题目要求(不然一个组合数就结束了),所以我们多记一个状态last
表示上一次是用能涂last
次的油漆涂的,如果这次我们用last - 1
的话,就有一种颜料重复了,所以就要减去一种的贡献。
这样就基本做完了,但dp顺序有点麻烦,所以就上记忆化吧,十分简短易写,强力安利!
具体dp方程见程序吧。。不想写了QAQ
代码
__EOF__

本文作者:zjp_shadow
本文链接:https://www.cnblogs.com/zjp-shadow/p/8436712.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/zjp-shadow/p/8436712.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】