Luogu2295 MICE
2024-10-18 22:31:46
给一个 \(n\times m\) 的矩阵 \(a\) ,求一条从 \((1,\ 1)\) 到 \((n,\ m)\) 的最短路径,使得与路径相接的所有网格的权值和最小
\(n,\ m\leq10^3,\ 0\leq a_{i,j}\leq100\)
dp
令 \(f_{0/1,\ i,\ j}\) 表示,走到 \((i,\ j)\) 时,上一步是向下走/向右走的最优值
代码
#include <bits/stdc++.h>
using namespace std;
#define nc getchar()
const int maxn = 1010;
int n, m, a[maxn][maxn], f[2][maxn][maxn];
inline int read() {
int x = 0; char c = nc;
while (c < 48) c = nc;
while (c > 47) x = x * 10 + c - 48, c = nc;
return x;
}
int main() {
n = read(), m = read();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
a[i][j] = read();
}
}
memset(f, 0x3f, sizeof f);
f[0][1][1] = f[1][1][1] = a[1][1] + a[1][2] + a[2][1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (i == 1 && j == 1) continue;
f[0][i][j] = min(f[0][i - 1][j] + a[i][j - 1], f[1][i - 1][j]) + a[i + 1][j] + a[i][j + 1];
f[1][i][j] = min(f[0][i][j - 1], f[1][i][j - 1] + a[i - 1][j]) + a[i + 1][j] + a[i][j + 1];
}
}
printf("%d", min(f[0][n][m], f[1][n][m]));
return 0;
}
最新文章
- WebSocket介绍和一个简单的聊天室
- Spring.Net简单用法
- HTML/Elements/base
- 当利用pip安装模块出现错误时咋办
- JDBC向数据库中插入数据
- Cocos2d-x PluginX (二)增加新的Plugin
- 邮件群发工具(C#版)
- category分类
- svn使用(服务器端和客户端)
- 老式浏览器兼容HTML5和CSS3的问题
- 【Asp.Net MVC】Avoid Mass Assignment in ASP.NET MVC
- [Python笔记]第六篇:文件处理
- Raw qcow qcow2 vhd-vpc虚拟磁盘格式间相互转换
- Font Awesome 4.0.3 字体图标完美兼容IE7
- 哈希表之bkdrhash算法解析及扩展
- ubuntu系统普通用户sudo命令执行报错解决方案
- 201521123083 《Java程序设计》第7周学习总结
- dedecms在php7下的使用方法,织梦dedecsm后台一片空白的解决方法
- Charles更新至4.2.8特别版
- H5 CSS的格式
热门文章
- git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
- elementUI vue upload完整示例
- 实现DevOps需要的工具
- ViewPager结合Fragment进行无限滑动
- Visual Studio未能加载“XX”包的解决方案
- 生成器(generator,yield),next,send
- 【粗糙版】javascript的变量、数据类型、运算符、流程结构
- JVM 之类加载
- JS的判断字符/元素是否存在数组列表
- 计算机图形学(第2版 于万波 于硕 编著)第45页的Bresenham算法有错误