最低通行费
来源:互联网 发布:python 字典转列表 编辑:程序博客网 时间:2024/05/24 01:05
一个商人穿过一个 N*N 的正方形的网格,去参加一个非常重要的商务活动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而在经过中间的每个小方格时,都需要缴纳一定的费用。
这个商人期望在规定时间内用最少费用穿越出去。请问至少需要多少费用?
注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。
后面 N 行,每行 N 个不大于 100 的整数,为网格上每个小方格的费用。
51 4 6 8 10 2 5 7 15 17 6 8 9 18 20 10 11 12 19 21 20 23 25 29 33
109
样例中,最小值为109=1+2+5+7+9+12+19+21+33。
相当于有一个正方形,各个点有一个数值,现在求从左上角到右下角使数值的和最小。
到达b[i][j]的数值和只与b[i-1][j]和b[i][j-1]有关,取二者之间小的再加上该点的数值a[i][j]就是所求的最小和。
b[i][j]=min(b[i-1][j],b[i][j-1])+a[i][j];
需要先做一个处理,把每一个行每一列的数值和算出,存进b[i][j]中。
这样问题就解决了。
#include <iostream>using namespace std;int min(int a,int b){ if(a>b) return b; else return a;}int main(){ int i,j,n; int a[110][110]; int b[110][110]={0}; cin>>n; for(i=1;i<=n;i++) for(j=1;j<=n;j++) cin>>a[i][j]; for(i=1;i<=n;i++) { b[i][1]=b[i-1][1]+a[i][1]; b[1][i]=b[1][i-1]+a[1][i]; } for(i=2;i<=n;i++) for(j=2;j<=n;j++) { b[i][j]=min(b[i][j-1],b[i-1][j])+a[i][j]; } cout<<b[n][n]<<endl; return 0;}
0 0
- 最低通行费
- 最低通行费
- 最低通行费
- 19:最低通行费
- 动态规划--最低通行费
- 19:最低通行费
- 19:最低通行费
- 动态规划:最低通行费
- 7614:最低通行费
- 7614_最低通行费
- 【NOIOPJ】P7614 最低通行费
- 7614:最低通行费
- NOI库7614 最低通行费
- [OpenJudge-NOI]最低通行费 Dp
- [NOI题库]7614:最低通行费
- 动态规划练习一 19:最低通行费
- 动态规划练习题-19(最低通行费)
- dp专题 第十九题 最低通行费
- Python基础入门(十)- 布尔类型条件判断与循环
- 对链表各种操作的实现(C语言)
- Web前端面试笔试题——null和undefined有什么区别么?
- 如何在Unity中对程序进行 Android 真机断点调试
- HDU 1757 A Simple Math Problem [矩阵快速幂]
- 最低通行费
- 十分钟学会Fiddler
- linux kernel 笔记(0)
- Linux中find命令的使用示例
- centOs 6.8 jdk,tomcat,安装与配置
- 有关Double小数保留小数问题
- HDU:1754 I Hate It(线段树)
- iOS--将 .sql 文件 写入数据库
- JavaScript回调函数详解