题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084
#include <iostream> #include <string.h> using namespace std; /**************************************************************************************************************** 思路:没什么说的了,最简单的dp,刚接触的时候和别难理解,现在好多了 重点在于: 1,优化子问题 2,状态转移方程 3,状态更新 理解了这几步相信简单的dp不在话下了,难一点的,咳!要会列方程 ****************************************************************************************************************/ int dp[105][105]; int main() { int T,N,a[105][105]; cin>>T; while(T--) { memset(dp,0,sizeof(dp)); memset(a,0,sizeof(a)); cin>>N; for(int i = 1;i <= N;i ++) for(int j = 1;j <= i;j ++) cin>>a[i][j]; for(int i = N;i > 0;i --) for(int j = 1;j <= i;j ++) dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j+1]); cout<<dp[1][1]<<endl; } return 0; }