AT_abc210_d [ABC210D] National Railway 的题解
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 的题解相关推荐
- atcoder AtCoder Beginner Contest 210 D - National Railway(dp)
传送门 思路: 首先考虑暴力的做法,枚举两个点计算距离后取最小值,复杂度 O ( n 4 ) O(n^{4}) O(n4) 考虑怎么优化. 首先可以确定的是,一定要枚举一个点,那么可以通过控制坐标的大 ...
- D - National Railway (DP)
题目链接 首先按红线所示方向走即 dp[i-1][j] 和dp[i][j-1] ,然后按黄线所示方向 dp[i-1][j] 和dp[i][j+1],这样即可遍历所有情况 #include <bi ...
- Prepare document for Week 2: Signaloid in Logistics
Prepare document for Week 2: Signaloid in Logistics 文章目录 Prepare document for Week 2: Signaloid in L ...
- 盖茨转让18亿美元股票给梅琳达,被传有85后新欢?当事人回应...
5月6日消息,据国外媒体报道,当地时间本周一盖茨的Cascade Investment控股公司将价值超过18亿美元的股票转让给了梅琳达·盖茨(Melinda Gates). 据提交给监管机构的文件,梅 ...
- 有影响力的数据挖掘软件列表
以下介绍分别按:公司.数据挖掘工具及其特点.应用行业案例 三个方面. 1.ANGOSS软件公司 http://www.angoss.com/ KnowledgeSTUDIO 平台:NT , Windo ...
- IELTS writing skills——学习笔记
小作文Part1-5学习笔记摘录自知乎:https://www.zhihu.com/question/21133796/answer/830942135 仅供学习使用,侵删. IELTS writin ...
- pyqt5 地图可视化 网页地图 folium
实验任务(实验题目.目的) Implement a shortest path algorithm and apply it to the national railway system.以全国主要城 ...
- 2022年铁路行业研究报告
第一章 行业概况 铁路运输是主要的陆上交通运输方式之一,铁路是指在综合交通运输体系中,用于运行火车等交通工具行驶的轨道线路.铁路运输是主要的陆上交通运输方式之一,是通过机车牵引车辆组成列车在铁轨上运送 ...
- 比尔盖茨离婚,平分8000亿! 用5张图看看微软的发展史
我是Allen,我的公众号是[CodeAllen],程序员技术交流①群:736386324,转载请注明出处 大早上看新闻刷到比尔盖茨离婚了,两人会平分8000多亿财产,跟很多吃瓜群众不同,我感觉离婚没 ...
最新文章
- 诊断IIS中的ASP0115错误
- 0代码就能做Python数据分析,这个Jupyter插件,用起来就像Excel一样简单
- Linux下的多进程间共享资源的互斥访问
- tensorflow随机性设置
- 知识图谱实践篇(五):KBQA Demo
- 1121 Damn Single (25 分)
- Codeforces Round #359 div2
- P1272 重建道路
- 爬虫-保存cookie到本地-利用MozillaCookieJar
- dubbo负载均衡策略配置
- 基于python的在线考试系统-基于Django的在线考试系统
- 修改eclipse或者myeclipse的背景颜色(全部的背景颜色)
- 彻底卸载流氓软件如360等 1. 使用卸载软件(附下载链接) 2. 安全模式删除两种方法
- 【STM32基础】第四篇、控制PWM占空比
- 服务器地址显示169.254,IP地址是169.254开头的
- Classics Sentence Excerpt
- IDEA集成Java性能分析神器JProfiler
- Android UI 基础知识
- 肝脏~卧则回血,坐立向外供血
- Uber牵手戴姆勒共事自动驾驶,探索未来出行模式