动态规划例题
解析
很容易发现每一个点可以由左边或者下面得到,得出公式dp[i][j]=min(dp[i][j-1],dp[i+1][j])+mp[i][j];注意判断边界
代码
#include<bits/stdc++.h> using namespace std; int mp[100][100]; int dp[100][100]; int main() { int xb,yb; for(int i=1;i<=3;i++) { for(int j=1;j<=3;j++) { cin>>mp[i][j]; } } for(int i=3;i>=1;i--)//左边(i,j-1)下面(i+1,j) { for(int j=1;j<=3;j++) { if(i==3&&j==1) continue; if(j-1>0&&i+1<4) { dp[i][j]=min(dp[i][j-1],dp[i+1][j])+mp[i][j]; } if(i==3) dp[i][j]=dp[i][j-1]+mp[i][j]; if(j==1) dp[i][j]=dp[i+1][j]+mp[i][j]; } } for(int i=1;i<=3;i++) { for(int j=1;j<=3;j++) { cout<<dp[i][j]<<" "; } cout<<endl; } cout<<dp[1][3]<<endl; }