当前位置: 首页 > news >正文

CF1517D Explorer Space

题意简述:

给定一个 n×m 的四联通带权网格图,对于每个格点求恰好k 步回到自身的最短路径,若无法到达,输出 −1 。

题解:

首先考虑无解的情况:显然k为奇数的情况时无解。

有解的情况下最优方案应该是选定一个长度为的路径,出去再回来。这样题意就变成从一个点出发,寻找一个长度为的最短路径。显然可以dp。

我们设dp[i][j][l]表示从(i,j)出发,走了l步的最小取值。

r[i][j]表示(i,j)与(i,j+1)之间的边权。

d[i][j]表示(i,j)与(i+1,j)之间的边权。 其中r数组和d数组是输入的。

先上代码

for(int l=1;l<=(k/2);l++){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ dp[i][j][l]=INT_MAX; if(j>1) dp[i][j][l]=min(dp[i][j][l],dp[i][j-1][l-1]+r[i][j-1]); if(j<m) dp[i][j][l]=min(dp[i][j][l],dp[i][j+1][l-1]+r[i][j]); if(i>1) dp[i][j][l]=min(dp[i][j][l],dp[i-1][j][l-1]+d[i-1][j]); if(i<n) dp[i][j][l]=min(dp[i][j][l],dp[i+1][j][l-1]+d[i][j]); } } }

这四条转移分别是从左,右,上,下转移过来。这个挺好理解的。然后l只到k/2。

输出要记得乘二。

for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ printf("%d ",dp[i][j][k/2]*2); } printf("\n"); }

完整代码(带注释)

#include<bits/stdc++.h> using namespace std; const int N=5e2+5,K=25; int n,m,k,r[N][N],d[N][N],dp[N][N][K];//设dp[i][j][l]表示从(i,j)出发,走了l步的最小取值。 //r[i][j]表示(i,j)与(i,j+1)之间的边权。 //d[i][j]表示(i,j)与(i+1,j)之间的边权。 int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++){ for(int j=1;j<m;j++){ scanf("%d",&r[i][j]); } } for(int i=1;i<n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&d[i][j]); } } if(k%2==1){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ printf("-1 "); } printf("\n"); } return ~(-1); } //设dp[i][j][l]表示从(i,j)出发,走了l步的最小取值。 //r[i][j]表示(i,j)与(i,j+1)之间的边权。 //d[i][j]表示(i,j)与(i+1,j)之间的边权。 /* (i-1,j) (i,j-1) (i,j) (i,j+1) (i+1,j) */ for(int l=1;l<=(k/2);l++){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ dp[i][j][l]=INT_MAX; if(j>1) dp[i][j][l]=min(dp[i][j][l],dp[i][j-1][l-1]+r[i][j-1]); if(j<m) dp[i][j][l]=min(dp[i][j][l],dp[i][j+1][l-1]+r[i][j]); if(i>1) dp[i][j][l]=min(dp[i][j][l],dp[i-1][j][l-1]+d[i-1][j]); if(i<n) dp[i][j][l]=min(dp[i][j][l],dp[i+1][j][l-1]+d[i][j]); } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ printf("%d ",dp[i][j][k/2]*2); } printf("\n"); } return ~(-1); }
http://www.jsqmd.com/news/467420/

相关文章:

  • 2026 企业级 AI 智能体行业发展报告:现状、赛道、机遇、主要厂商 - 博客万
  • 你知道吗?考取一个安全员ABC证有什么作用呢?在建筑行业安全员证“含金量”高吗?
  • 2026制造业AI推广服务优质机构推荐 - 资讯焦点
  • 电价差与用户响应:Logistic函数在需求响应中的魅力
  • 工业微量喷涂流量测量:2026优质超声波流量传感器品牌推荐 - 品牌2026
  • halcon demo
  • MySQL多表查询
  • S7-1200平面磨床电气控制系统的PLC改造
  • 从LCC全寿命周期看制动系统升级:为什么碳陶是Brembo卡钳的终极归宿? - RF_RACER
  • LeetCode 242. 有效的字母异位词(C语言详解 | 哈希计数法)
  • 2026年面向喷墨印刷系统优质超声波流量传感器品牌推荐 - 品牌2026
  • 2026去屑控油蓬松洗发水专业测评油头头屑党闭眼入蓬松神器 - 资讯焦点
  • Langgraph 5. 工具使用 Tool Use(Function Calling)
  • 变量的定义与分类
  • 2026年米特科斯鱼片机性价比分析,质量好不好看这里 - 工业品网
  • 多路io(select/epoll)
  • 光伏电池建模及仿真:探索PV曲线与IV曲线的奥秘
  • 2026年上海热门的别墅座椅电梯厂家,Uzin优行值得选吗 - 工业设备
  • 2026做轻量化单兵无人机系统比较好的公司有哪些推荐?猎翼无人机的飞行体验 - 品牌2026
  • 阿里云轻量服务器搭建 WireGuard (wg-easy) 指南
  • DevOps技术面试指南:容器、云原生与内核核心问题
  • ACWing 3497 质数
  • 浙江润鑫轴线车无线汽车称重仪:智能无线传输,称重检测一步到位 - 速递信息
  • 【操作系统学习日记】《现代处理器性能的三重奏:ISA架构、流水线与缓存系统》
  • 基于C# WinForm的PLC通讯上位机开发之旅:Modbus协议与SQL 2008的融合
  • 探索微观孔隙建模插件:开启多领域模拟的新大门
  • 【LeetCode】1. 两数之和(Two Sum)— 哈希表经典题解(C语言)
  • ESP32-S3 基础介绍
  • 探索 COMSOL 中含裂缝地层的流动与传热耦合模拟:油藏数值模拟实战
  • 基于二进制粒子群算法的配电网故障诊断—Matlab 应用选取配电网故障诊断,采用二进制粒子群优化算法