AT_abc210_d [ABC210D] National Railway 的题解

洛谷传送门

AT传送门

题目大意

给你一个 n × m n\times m n×m 大小的地点,问你需要选择两个地点建地点站,并在其之间建立轨道,问最小花费。

思路

根据题意,实际上建立轨道的花费相当于是它们的曼哈顿距离 × c \times c ×c,所以如果我们建好了一个站,那么相当于我可以行走到下一个地点再建一个站,所以我们可以先记录好前半部分的最小花费。我们可以用 d p [ i ] [ j ] dp[i][j] dp[i][j] 来表示已经建好了一个地铁站,且已经走到了 ( i , j ) (i,j) (i,j),为了考虑全面,我们遍历的方向实际上就是东北和东南方向。所以我们要分两次来跑,对于东南方向,状态转移方程易知: d p [ i ] [ j ] = { a i j , d p [ i − 1 ] [ j ] + c , d p [ i ] [ j − 1 ] + c } dp[i][j] = \{a_{ij},dp[i-1][j]+c,dp[i][j-1]+c\} dp[i][j]={aij​,dp[i−1][j]+c,dp[i][j−1]+c} 那么我们处理好 d p dp dp 数组之后,还有一点就是如何确定最后一个地铁站建在哪最优,哪很明显,我们直接遍历 d p dp dp 数组再枚举我们建立的地铁站即可。

代码

#include <bits/stdc++.h>
#define lowbit(x) x & (-x)
#define endl "\n"
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
namespace fastIO {inline int read() {register int x = 0, f = 1;register char c = getchar();while (c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;}inline void write(int x) {if(x < 0) putchar('-'), x = -x;if(x > 9) write(x / 10);putchar(x % 10 + '0');return;}
}
using namespace fastIO;
const ll INF = 0x3f3f3f3f3f3f3f;
int n, m, c;
ll a[1005][1005], dp[1005][1005], ans[1005][1005];
int main() {//freopen(".in","r",stdin);//freopen(".out","w",stdout);n = read(), m = read(), c = read();for(int i = 1; i <= n; i ++) {for(int j = 1; j <= m; j ++) {scanf("%lld", &a[i][j]);}}fill(dp[0], dp[0] + 1005 * 1005, INF);fill(ans[0], ans[0] + 1005 * 1005, INF);for(int i = 1; i <= n; i ++) {for(int j = 1; j <= m; j ++) {dp[i][j] = min(a[i][j], min(dp[i - 1][j], dp[i][j - 1]) + c);}}ll minn = INF;for(int i = 1; i <= n; i ++) {for(int j = 1; j <= m; j ++) {ans[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + c + a[i][j];minn = min(ans[i][j], minn);}}for(int i = n; i >= 1; i --) {for(int j = 1; j <= m; j ++) {dp[i][j] = min(a[i][j], min(dp[i + 1][j], dp[i][j - 1]) + c);}}for(int i = 1; i <= n; i ++) {for(int j = 1; j <= m; j ++) {ans[i][j] = min(dp[i + 1][j], dp[i][j - 1]) + c + a[i][j];minn = min(ans[i][j], minn);}}printf("%lld\n", minn);return 0;
}

AT_abc210_d [ABC210D] National Railway 的题解相关推荐

  1. atcoder AtCoder Beginner Contest 210 D - National Railway(dp)

    传送门 思路: 首先考虑暴力的做法,枚举两个点计算距离后取最小值,复杂度 O ( n 4 ) O(n^{4}) O(n4) 考虑怎么优化. 首先可以确定的是,一定要枚举一个点,那么可以通过控制坐标的大 ...

  2. D - National Railway (DP)

    题目链接 首先按红线所示方向走即 dp[i-1][j] 和dp[i][j-1] ,然后按黄线所示方向 dp[i-1][j] 和dp[i][j+1],这样即可遍历所有情况 #include <bi ...

  3. Prepare document for Week 2: Signaloid in Logistics

    Prepare document for Week 2: Signaloid in Logistics 文章目录 Prepare document for Week 2: Signaloid in L ...

  4. 盖茨转让18亿美元股票给梅琳达,被传有85后新欢?当事人回应...

    5月6日消息,据国外媒体报道,当地时间本周一盖茨的Cascade Investment控股公司将价值超过18亿美元的股票转让给了梅琳达·盖茨(Melinda Gates). 据提交给监管机构的文件,梅 ...

  5. 有影响力的数据挖掘软件列表

    以下介绍分别按:公司.数据挖掘工具及其特点.应用行业案例 三个方面. 1.ANGOSS软件公司 http://www.angoss.com/ KnowledgeSTUDIO 平台:NT , Windo ...

  6. IELTS writing skills——学习笔记

    小作文Part1-5学习笔记摘录自知乎:https://www.zhihu.com/question/21133796/answer/830942135 仅供学习使用,侵删. IELTS writin ...

  7. pyqt5 地图可视化 网页地图 folium

    实验任务(实验题目.目的) Implement a shortest path algorithm and apply it to the national railway system.以全国主要城 ...

  8. 2022年铁路行业研究报告

    第一章 行业概况 铁路运输是主要的陆上交通运输方式之一,铁路是指在综合交通运输体系中,用于运行火车等交通工具行驶的轨道线路.铁路运输是主要的陆上交通运输方式之一,是通过机车牵引车辆组成列车在铁轨上运送 ...

  9. 比尔盖茨离婚,平分8000亿! 用5张图看看微软的发展史

    我是Allen,我的公众号是[CodeAllen],程序员技术交流①群:736386324,转载请注明出处 大早上看新闻刷到比尔盖茨离婚了,两人会平分8000多亿财产,跟很多吃瓜群众不同,我感觉离婚没 ...

最新文章

  1. 诊断IIS中的ASP0115错误
  2. 0代码就能做Python数据分析,这个Jupyter插件,用起来就像Excel一样简单
  3. Linux下的多进程间共享资源的互斥访问
  4. tensorflow随机性设置
  5. 知识图谱实践篇(五):KBQA Demo
  6. 1121 Damn Single (25 分)
  7. Codeforces Round #359 div2
  8. P1272 重建道路
  9. 爬虫-保存cookie到本地-利用MozillaCookieJar
  10. dubbo负载均衡策略配置
  11. 基于python的在线考试系统-基于Django的在线考试系统
  12. 修改eclipse或者myeclipse的背景颜色(全部的背景颜色)
  13. 彻底卸载流氓软件如360等 1. 使用卸载软件(附下载链接) 2. 安全模式删除两种方法
  14. 【STM32基础】第四篇、控制PWM占空比
  15. 服务器地址显示169.254,IP地址是169.254开头的
  16. Classics Sentence Excerpt
  17. IDEA集成Java性能分析神器JProfiler
  18. Android UI 基础知识
  19. 肝脏~卧则回血,坐立向外供血
  20. Uber牵手戴姆勒共事自动驾驶,探索未来出行模式

热门文章

  1. 视频号推广小程序是什么;助你快速引流变现;丨国仁网络资讯
  2. 视频会议工具Zoom上市大涨—办公真的必须面对面吗?
  3. 神奇的cyclegan!
  4. Swift基础入门知识学习(12)-枚举(列举)-讲给你懂
  5. Neural Collaborative Filtering(NCF) 代码实战(Keras)
  6. 元宇宙时代NFT的价值衡量
  7. chrome插件- Vue Devtools not detected vue.js
  8. Go语言编程入门超级指南
  9. Python获取Amazon限时特惠信息
  10. 刚开始学java ,java代码开头的几行都是什么意思?