DP
转移方程
通过摘花生的题目不难得到转移方程。
但是呢,这道题需要处理边界。
处理边界有很多方法,在这里推荐y总讲过的处理方法:
处理左上角
在每次得到f[i][j]的时候注意i>1,j>1
具体思路看代码就可以解决了qwq
C++ 代码
#include <iostream>
#include <cstdio>
using namespace std;
const int inf=3e9;
int n;
int w[1001][1001];
int f[1001][1001];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%d",&w[i][j]);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==1 && j==1)
{
f[i][j]=w[i][j];
}
else
{
f[i][j]=inf;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i>1)
{
f[i][j]=min(f[i-1][j]+w[i][j],f[i][j]);
}
if(j>1)
{
f[i][j]=min(f[i][j-1]+w[i][j],f[i][j]);
}
}
}
cout<<f[n][n];
return 0;
}