Lougu2295 MICE

给一个 \(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;
}

最新文章

  1. WebSocket介绍和一个简单的聊天室
  2. Spring.Net简单用法
  3. HTML/Elements/base
  4. 当利用pip安装模块出现错误时咋办
  5. JDBC向数据库中插入数据
  6. Cocos2d-x PluginX (二)增加新的Plugin
  7. 邮件群发工具(C#版)
  8. category分类
  9. svn使用(服务器端和客户端)
  10. 老式浏览器兼容HTML5和CSS3的问题
  11. 【Asp.Net MVC】Avoid Mass Assignment in ASP.NET MVC
  12. [Python笔记]第六篇:文件处理
  13. Raw qcow qcow2 vhd-vpc虚拟磁盘格式间相互转换
  14. Font Awesome 4.0.3 字体图标完美兼容IE7
  15. 哈希表之bkdrhash算法解析及扩展
  16. ubuntu系统普通用户sudo命令执行报错解决方案
  17. 201521123083 《Java程序设计》第7周学习总结
  18. dedecms在php7下的使用方法,织梦dedecsm后台一片空白的解决方法
  19. Charles更新至4.2.8特别版
  20. H5 CSS的格式

热门文章

  1. git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
  2. elementUI vue upload完整示例
  3. 实现DevOps需要的工具
  4. ViewPager结合Fragment进行无限滑动
  5. Visual Studio未能加载“XX”包的解决方案
  6. 生成器(generator,yield),next,send
  7. 【粗糙版】javascript的变量、数据类型、运算符、流程结构
  8. JVM 之类加载
  9. JS的判断字符/元素是否存在数组列表
  10. 计算机图形学(第2版 于万波 于硕 编著)第45页的Bresenham算法有错误