abc301 E

正解状压dp + 最短路。

一开始是考虑的直接dp,但是这个题里是可以向四个方向移动的,因此普通的dp就具有后效性,搞了很久也没搞出转移方程。

题目中虽然地图范围较大,但是糖果数很少。因此可以最短路算出糖果两两间的距离和他们到终点/起点的距离。

剩下的就是状压dp了。

dp[i][j] 为状态为 2 时,最后一步走到第 j 个糖果所需要的最短路径。 i 即为压缩的状态,某一位为 1 则表示拿这个糖果。
于是状态转移如下:

for (int i = 0; i < 1 << cnt + 2; i++){ for (int j = 0; j <= cnt + 1; j++){ if (i & 1 << j){ for (int k = 0; k <= cnt + 1; k++){ if ((i ^ 1 << j) & 1 << k){ dp[i][j] = min(dp[i][j],dp[i ^ 1 << j][k] + dis[k][j]); } } } } } ```

__EOF__

本文作者Never Gonna Give You Up!
本文链接https://www.cnblogs.com/CZ-9/p/17403226.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   腾云今天首飞了吗  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示