BZOJ4607 : [PA2015 Final]Edycja

显然做完操作2后再做操作1

建立一个26个点的有向图,每个点只有一条出边,i->j表示i最终变成了j,边权为一开始是i,最后不是j的位置个数,如果ij,则代价还要增加c

对于每个点贪心选取最小的出边,如果没有环,那么此时就是最优解。

否则,对于一个连通块,如果它是环,那么需要多付出c点代价,而且如果所有连通块都是环或者孤立点,则不可能构造出这种图。

考虑重新决定每个点的出边,如果出现了原来贪心构造出的图中不存在的环,那么一定有一个点的出边和一开始不同,因为一开始是贪心选最小,因此把那条边改回最开始的出边,答案不会增加,而且新环被破坏了。因此对于不是原来中的图的环,一定存在一种方案与它代价相同,且不存在这个环。

于是设f[i][S][j]表示考虑了前i个字符,S集合的环已经被破坏,是否和原图一样为j时边权的最小值,DP即可。

因为最多只有13个环,所以时间复杂度为O(n+262×213)

 

  

posted @   Claris  阅读(1394)  评论(2编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示