标签:
递推式dp[i][j]=max( dp[i-1][j] , dp[i-1][j-1] )+a[i][j];
①第一次做数塔,不会输入。数塔的输入
1 for(int i=1;i <= n;i++) 2 { 3 for(int j=1;j <= i;j++) 4 { 5 scanf("%d",&a[i][j]); 6 } 7 }
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 using namespace std; 6 const int maxn=355; 7 int a[maxn][maxn],dp[maxn][maxn]; 8 int main() 9 { 10 int n; 11 while(~scanf("%d",&n)) 12 { 13 memset(dp,0,sizeof(dp)); 14 for(int i=1;i <= n;i++) 15 { 16 for(int j=1;j <= i;j++) 17 { 18 scanf("%d",&a[i][j]); 19 //dp[i][j]=a[i][j]; 20 } 21 } 22 23 for(int i=1;i<=n;i++) 24 { 25 for(int j=1;j<=i;j++) 26 { 27 dp[i][j]=max( dp[i-1][j] , dp[i-1][j-1] )+a[i][j]; 28 } 29 } 30 int mmax=dp[n][1]; 31 for(int i=1;i<=n;i++) 32 { 33 if(mmax<dp[n][i]) 34 mmax=dp[n][i]; 35 } 36 37 38 printf("%d",mmax); 39 40 } 41 return 0; 42 }
标签:
原文地址:http://www.cnblogs.com/luosuo10/p/5414560.html