由于格子只有N个,那么(2n-1)可以不管他
由于要求最小费用1,贪心的想,就是不走回头路
也就是说,我们每次走都只会往右走或者往下走,这样子就退化成了数字三角形模型
分析图如下
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=105;
int a[N][N];
int dp[N][N];
int main()
{
int n;
cin>>n;
//求最小值,初始化为无穷大
memset(dp,0x3f,sizeof dp);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
//求最小值,需要对(1,1)初始化
dp[1][1]=a[1][1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==1&&j==1) continue;
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+a[i][j];
}
cout<<dp[n][n];
}