#include <iostream> #include <algorithm> using namespace std; static int A[1000][1000]; static int dp[1000][1000]; int main(){ int n; int maxi = 0; cin>>n; for(int i = 0;i < n; i++){ for(int j = 0;j <= i; j++){ cin>>A[i][j]; } } dp[0][0] = A[0][0]; for(int i = 1;i < n; i++){ for(int j = 0;j <= i; j++){ if(j == 0){ dp[i][j] = A[i][j] + dp[i-1][j]; } else if(j == i){ dp[i][j] = A[i][j] + dp[i-1][j-1]; } else dp[i][j] = A[i][j] + max(dp[i-1][j],dp[i-1][j-1]); if(maxi < dp[i][j]){ maxi = dp[i][j]; } } } cout<<maxi; }
最基础的动态规划,每次存储数据,然后取最优,动态规划实质上就是在前几个状态中判断最优状态,于是乎每次都能获得最佳状态