动态规划就是递推,要找到最优的递推式,递推后找到答案。
洛谷数字三角形就是一道经典例题。
题目要求找到使路径经过数字的和最大的路。由此,我们可以推出,递推式。我们可以知道,一个数字上方的数值最大的路径肯定是较大的数字,所以,递推式是:
dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);
以上是按照从下往上推的过程写的。
所以最后的答案会在dp[0][0]。
输出dp[0][0]就是最后的答案。
下面是完整代码:
#include<cmath>
#include<iostream>
using namespace std;
int dp[1000][1000];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<=i;j++){
cin>>dp[i][j];
}
}
for(int i=n-2;i>=0;i--){
for(int j=0;j<=i;j++){
dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);
}
}
cout<<dp[0][0]<<endl;
return 0;
}