The Triangle
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 51049 | Accepted: 30929 |
Description
7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure 1)
Input
Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle,
all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
Sample Output
30
#include <iostream> #include <algorithm> using namespace std; int m=100; int main() { int array[m][m]; int *getsum;//进一步优化空间,指针 int n; cin>>n; for(int i=1;i<=n;++i) for(int j=1;j<=i;++j) cin>>array[i][j]; getsum=array[n]; for(int i=n-1;i>=1;--i) for(int j=1;j<=i;++j) getsum[j]=max(getsum[j],getsum[j+1])+array[i][j]; //不理解的话可以用getsum[j]=max(array[i+1][j],array[i+1][j+1])+array[i][j];将数值代入就会发现rray每次计算的数值并没有与getsum的值联系在一起 cout<<getsum[1]<<endl; return 0; }//递推,空间优化 #include <iostream> #include <algorithm> using namespace std; int m=100; int main() { int array[m][m]; int getsum[m]; int n; cin>>n; for(int i=1;i<=n;++i) for(int j=1;j<=i;++j) cin>>array[i][j]; for(int i=1;i<=n;++i) getsum[i]=array[n][i]; for(int i=n-1;i>=1;--i) for(int j=1;j<=i;++j) getsum[j]=max(getsum[j],getsum[j+1])+array[i][j]; //不理解的话可以用getsum[j]=max(array[i+1][j],array[i+1][j+1])+array[i][j];将数值代入就会发现rray每次计算的数值并没有与getsum的值联系在一起 cout<<getsum[1]<<endl; return 0; }//超时 #include <iostream> #include <algorithm> #define m 100 using namespace std; int n; int array[m][m]; int getsum(int i,int j) { if(i==n) return array[i][j]; int x=getsum(i+1,j); int y=getsum(i+1,j+1); return max(x,y)+array[i][j]; } int main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) cin>>array[i][j]; cout<<getsum(1,1)<<endl; return 0; } //递归 #include <iostream> #include <algorithm> #define m 100 using namespace std; int n; int array[m][m]; int maxsum[m][m]; int getsum(int i,int j) { if(maxsum[i][j]!=-1) return maxsum[i][j]; if(i==n) maxsum[i][j]=array[i][j]; else { int x=getsum(i+1,j); int y=getsum(i+1,j+1); maxsum[i][j]=max(x,y)+array[i][j]; } return maxsum[i][j]; } int main() { cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) { cin>>array[i][j]; maxsum[i][j]=-1; } cout<<getsum(1,1)<<endl; return 0; } //递推 #include <iostream> #include <algorithm> using namespace std; int m=100; int main() { int array[m][m]; int getsum[m][m]; int n; cin>>n; for(int i=1;i<=n;++i) for(int j=1;j<=i;++j) cin>>array[i][j]; for(int i=1;i<=n;++i) getsum[n][i]=array[n][i]; for(int i=n-1;i>=1;--i) for(int j=1;j<=i;++j) getsum[i][j]=max(getsum[i+1][j],getsum[i+1][j+1])+array[i][j]; cout<<getsum[1][1]<<endl; return 0; }