知识点
多维路径动态规划
思路
我们可以考虑反向转移,dp[i][j]代表从最后一行到达第i行第j列的最小代价,dp[0][0]即为所求(注意下标从0开始)。
转移方程:由题意,当前位置dp[i][j],只能由dp[i+1][j]和dp[i+1][j+1]转移过来。还要再加上自身的花费:
dp[i][j]=min(dp[i+1][j],dp[i+1][j+1])+cows[i][j];
初始化:最后一行直接初始化为cows的最后一行
代码
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cows int整型vector<vector<>>
* @return int整型
*/
int minimumTotal(vector<vector<int> >& cows) {
int dp[1005][1005];
int n=cows.size();
for(int i=0;i<n;i++)
{
dp[n-1][i]=cows[n-1][i];
}
for(int i=n-2;i>=0;i--)
{
for(int j=0;j<=i+1;j++)
{
dp[i][j]=min(dp[i+1][j],dp[i+1][j+1])+cows[i][j];
}
}
cout<<dp[0][0]<<endl;
return dp[0][0];
}
};