题目链接


解题思路:

这题目本质就是求K/2步最短路然后乘以2就可以了因为要回去嘛

如何求k/2步最短路呢?
就是我们dp[k][i][j]dp[k][i][j]dp[k][i][j]求的是kkk步到(i,j)(i,j)(i,j)的最短路是多长?
外层枚举kkk,里面枚举(i,j)(i,j)(i,j)


#include <bits/stdc++.h>
#define mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define f first
#define s second
#define endl '\n'
using namespace std;
const int N = 2e6 + 10, mod = 1e9 + 9;
const int maxn = 500010;
const long double eps = 1e-5;
const int EPS = 500 * 500;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
int n, m, k;
int a[501][501];
int b[501][501];
int dp[25][501][501];
inline bool check(int x, int y) {if(x < 1 || x > n || y < 1 || y > m) return 0;else return 1;
}
int main() {IOS;cin >> n >> m >> k;for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m-1; ++ j)cin >> a[i][j];for(int i = 1; i <= n-1; ++ i)for(int j = 1; j <= m; ++ j)cin >> b[i][j];if(k & 1) {for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m; ++ j) cout << "-1" << " \n"[j == m];} else {memset(dp,INF,sizeof(dp));for(int i = 1; i <= n; ++ i)for(int j = 1; j <= m; ++ j)dp[0][i][j] = 0;for(int i = 1; i <= k / 2; ++ i)for(int j = 1; j <= n; ++ j)for(int s = 1; s <= m; ++ s) {if(check(j-1,s)) dp[i][j][s] = min(dp[i-1][j-1][s]+b[j-1][s],dp[i][j][s]);if(check(j+1,s)) dp[i][j][s] = min(dp[i-1][j+1][s]+b[j][s],dp[i][j][s]);if(check(j,s+1)) dp[i][j][s] = min(dp[i-1][j][s+1]+a[j][s],dp[i][j][s]);if(check(j,s-1)) dp[i][j][s] = min(dp[i-1][j][s-1]+a[j][s-1],dp[i][j][s]);} for(int i = 1; i <= n; ++ i) for(int j = 1; j <= m; ++ j)cout << dp[k/2][i][j] * 2 << " \n"[j == m];}
}

思维dp ---- K步最短路 D. Explorer Space相关推荐

  1. 【面试题】一个环,有n个点, 问从0点出发,经过k步回到原点有多少种方法

    一.题目描述 一个环,有n个点(编号 0 ~ n-1 ), 问从0点出发,经过k步回到原点(0点)有多少种方法 ? 二.解题思路 & 代码 再回到 0 点可以从右面回来,也可以从左面回来,即先 ...

  2. 365天挑战LeetCode1000题——Day 079 力扣周赛专题 米哈游 检查相同字母间的距离 恰好移动 k 步到达某一位置的方法数目 最长优雅子数组

    6167. 检查相同字母间的距离 简单的遍历,注意每个字母只能遍历一遍,第二次遍历时要跳过,所以需要用一个哈希表来记录 代码实现(自解) class Solution {public:bool che ...

  3. 算法46-机器人在K步内从M点到达P点问题

    题目: 四个参数N表示行走范围,M 表示起点,k表示步数,p表示目标位置,计算出从M 点出发,经过K步之后到达P点有几种方法 机器人在1点和N 点只能向中间走,机器人在除了两端的任意位置都可以自由选择 ...

  4. 思维dp ---- 复杂状态找中间状态作为dp状态 1552F - Telepanting

    题目链接 题目大意: 有个蚂蚁从000号点要到xn+1x_n+1xn​+1的位置. 在x0,x1,x2,x3,.....,xn+1,xnx_0,x_1,x_2,x_3,.....,x_{n+1},x_ ...

  5. leetcode 将包含 n 个元素的数组向右旋转 k 步

    将包含 n 个元素的数组向右旋转 k 步. 例如,如果 n = 7 , k = 3,给定数组 [1,2,3,4,5,6,7] ,向右旋转后的结果为 [5,6,7,1,2,3,4]. 注意: 尽可能找到 ...

  6. 【算法题目】有n个台阶,青蛙一次只能跳1步到k步,请问有多少种跳法?

    有n个台阶,青蛙一次只能跳1步到k步,请问有多少种跳法? 这个问题是一个经典的爬楼梯问题,可以使用递推方法解决. 设f[i]表示到达第i层台阶的跳法数,那么到达第i层台阶的跳法数可以由从第i-1,i- ...

  7. CodeForces - 1517D Explorer Space(dp)

    题目链接:点击查看 题目大意:给出一个 n∗mn*mn∗m 的矩阵,每个点都可以到达相邻的四个点,每条边都有一个边权,问对于每个点 (i,j)(i,j)(i,j),走 kkk 步可以回到 (i,j)( ...

  8. CodeForces - 1353E K-periodic Garland(思维+dp)

    题目链接:点击查看 题目大意:给出 n 个灯泡以及其初始状态(开或关),每次操作可以将任意一个灯泡的状态置反,问最少需要操作多少次,可以使得所有开着的灯泡之间相距 k 个单位 题目分析:因为需要满足所 ...

  9. 【HDU - 5418】Victor and World(tsp旅行商问题,状压dp,floyd最短路,图论)

    题干: After trying hard for many years, Victor has finally received a pilot license. To have a celebra ...

最新文章

  1. jQuery select操作控制方法小结
  2. 阿里云OSS存储开发
  3. 两种选择排序算法:简单选择排序、堆排序
  4. vue学习:v-on
  5. Struts2和Struts1.x的全面比较一
  6. c实现三角形角度大于一个值_初中数学三角形知识点小结
  7. 。。。。。etc 时域错误隐藏个人理解
  8. 【注册机】Zillions of Games v2.0.1p 注册机
  9. 9 10次c语言上机作业答案,C语言第五次上机作业参考答案
  10. ORA-27300错误
  11. Spring-beans-BeanDefinitionReader
  12. cad手机看图 android,CAD手机看图
  13. STM32——EMWIN位图显示(四)
  14. 烦请大家支持一票,谢谢!!
  15. JavaScript数组forEach方法
  16. 计算机符号mi,在线特殊符号大全
  17. 华为鸿蒙11公测版,首升鸿蒙2.0系统!华为官宣这10款机型率先公测EMUI11-互联网/电商-文章-小虾米...
  18. iOS界面--Tom猫的实现
  19. webpy快速入门 搭建python服务器
  20. 点线特征融合求取相机位姿

热门文章

  1. 小甲鱼关于push,pop指令的一个编程题
  2. 什么是蠕虫,木马以及二者跟病毒是什么关系!
  3. C C++输出语句printf()输出保留小数点后保留1,2,3,4,5,6,7..n位(默认四舍五入)
  4. 自动化早已不是那个自动化
  5. 综述:解决目标检测中的样本不均衡问题
  6. 10个例子带你了解机器学习中的线性代数
  7. Spring踩坑记录
  8. Zabbix安装配置(CentOS7.3)
  9. Java基础--定时任务Timer
  10. HDU 6208 The Dominator of Strings ——(青岛网络赛,AC自动机)