前言:
这篇文章还是是为了帮助一些
像我这样的菜鸟
找到简单的题解
我把期中测试的题全写成题解帮助他人
问题描述:
老师的 “谆谆教诲” :no zuo no die why you try, you try you die no yi wai (介4神马东东~~)
奥特曼过于嚣张了,引来了小怪兽们的集体围攻。奥特曼只好释放终极大招——打不过就跑,开始了 “幸福” 的逃难之旅,奈何仇恨太大,小怪兽们仍穷追不舍。
奥特曼来到了一处必经之地,是一个 的矩阵,每一个 的格子上都标有一个正整数,是奥特曼通过这个格子必须要支付的过路费。奥特曼必须从 的位置走到 的位置,才算安全通过。
注:
时间不等人,奥特曼想快速地通过矩阵,所以不能走回头路,每次只能向下或向右走一格。
奥特曼不能随便花钱,毕竟后面的逃难之路上可能还要花钱。因此,奥特曼想请你帮他算一下,他通过这个矩阵的最少费用。
输入格式
第一行两个整数 和 。
接下来 行,每行有 个正整数 ,为通过当前格子所需的费用。
输出格式
一行一个数,为奥特曼需要支付的费用。
样例输入
4 3 4 8 7 9 4 7 1 5 2 2 8 7
样例输出
28
问题解析:
凹凸曼太逊了
这道题有点像淘宝之旅
需要把max改为min
再注意边界
c++ 淘宝之旅题解(爱思创)_吾乃狙击神蛐的博客-CSDN博客
完整代码:
#include <bits/stdc++.h>
using namespace std;
int a[1001][1001],f[1001][1001];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i-1!=0 || j-1!=0)
f[i][j]=min(f[i-1][j],f[i][j-1])+a[i][j];//考虑边界
if(i-1==0)
f[i][j]=f[i][j-1]+a[i][j];//考虑边界
if(j-1==0)
f[i][j]=f[i-1][j]+a[i][j];//考虑边界
}
}
cout<<f[n][m];
return 0;
}