3251:最少费用
- 题目链接:百炼题库 http://bailian.openjudge.cn/practice/3251
- 总时间限制: 1000ms 内存限制: 65536kB
- 描述
- 一个商人穿过一个正方形的网格,每经过网格上的一个点需要缴纳一定的费用。每行和每列上的点费用都是按照从小到大顺序排列的,并且对于每个网格上的点,其前后左右的各个点的收费都是不一样的。
编写程序设计一个商人总左上角走到右下角花费的最小费用。 - 输入
- 第一行是一个整数,表示正方行的宽度N (N <100),
后面n行n列为网格上每个点的费用 - 输出
- 一行,表示最小费用
- 样例输入
-
5 1 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
- 提示
- 可以用递归方法,或者动态规划方法
- 来源
- cs10107 C++ Final Exam
分析:
假设a[i][j]表示从左上角走到a[i][j]的最小代价。那么有如下的递推式:
a[i][j]=min( a[i][j-1], a[i-1][j] )+a[i][j],其中i,j大于0.
当i==j==0时,a[i][j]就是题目输入的a[0][0].
当i==0&&j!=0时,a[i][j]=a[i][j-1]+a[i][j]
当i!=0&&j==0时,a[i][j]=a[i-1][j]+a[i][j].
所以代码如下:
1 #include<string.h> 2 #include<stdio.h> 3 4 int n; 5 int matrix[100][100]; 6 int value[100][100]; 7 8 int main() 9 { 10 scanf("%d", &n); 11 for (int i = 0; i < n; i++) 12 { 13 for (int j = 0; j < n; j++) 14 { 15 int temp; 16 scanf("%d", &temp); 17 matrix[i][j] = temp; 18 } 19 } 20 21 for (int i = 0; i < n; i++) 22 { 23 for (int j = 0; j < n; j++) 24 { 25 if ((i == 0) && (j == 0)) 26 { 27 value[i][j] = matrix[i][j]; 28 } 29 else if ((i == 0) && (j != 0)) 30 { 31 value[i][j] = matrix[i][j] + value[i][j - 1]; 32 } 33 else if ((i != 0) && (j == 0)) 34 { 35 value[i][j] = matrix[i][j] + value[i - 1][j]; 36 } 37 else 38 { 39 int a = matrix[i][j] + value[i - 1][j]; 40 int b = matrix[i][j] + value[i][j - 1]; 41 value[i][j] = (a > b) ? b : a; 42 } 43 44 } 45 } 46 printf("%d", value[n - 1][n - 1]); 47 return 0; 48 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2017-03-03 跳跃游戏