1 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
30
下面是代码:
/* 从上到下 */ #include<stdio.h> #include<iostream> #define max(a,b) a>b?a:b using namespace std; int dp[360][360]; int main() { int t,i,j,n; int maxn; cin>>t; while(t--) { cin>>n; for(i=0;i<n;i++) for(j=0;j<=i;j++) cin>>dp[i][j]; for(i=1;i<n;i++) { dp[i][0]+=dp[i-1][0]; dp[i][i]+=dp[i-1][i-1]; } for(i=2;i<n;i++) { for(j=1;j<i;j++) dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]); } for(maxn=-1,j=0;j<n;j++) maxn=max(maxn,dp[n-1][j]); cout<<maxn<<endl; } return 0; } /* 从下到上 */ #include<iostream> #include<cstdio> int dp[1001][1001]; #define max(a,b) a>b?a:b using namespace std; int main(int i,int j) { int t; int n; cin>>t; while(t--) { cin>>n; for(i=0;i<n;i++) for(j=0;j<=i;j++) cin>>dp[i][j]; for(i=n-1;i>=0;i--) for(j=0;j<=i;j++) dp[i][j]+=max(dp[i+1][j+1],dp[i+1][j]); cout<<dp[0][0]<<endl; } return 0; } 相比而言这个会更简单,因为这样它就就归到一个定点,不用判断它是否为最大值了,还有一种记忆化搜索,是在动态规划基础上进行优化的
简单的dp hdu 数塔(水题),布布扣,bubuko.com
原文:http://blog.csdn.net/chaoyueziji123/article/details/37964539