The Triangle
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 51049 | Accepted: 30929 |
Description
73 88 1 02 7 4 44 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
573 88 1 0 2 7 4 44 5 2 6 5
Sample Output
30
#include#include 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< <
//递推,空间优化#include#include 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< <
//超时#include#include #define m 100using 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< < #include #define m 100using 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< < #include 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< <