#include <iostream> #include <cmath> using namespace std ; int main() { int t ; cin >> t ; while(t--) { int n ; cin >> n ; int a[102][102]={0} , s[102][102] = {0}; for ( int i = 1 ; i <= n ; ++i) for ( int j = 1 ; j <=i ; ++j) { cin >> a[i][j]; } for ( int i = 1 ; i <= n ; ++i) s[n][i]=a[n][i]; for ( int i = n - 1 ; i >=1;--i) for ( int j = i ; j >=1 ; --j) { s[i][j]=a[i][j]+max(s[i+1][j],s[i+1][j+1]); } cout << s[1][1] << endl; } return 0 ; }
第二个是从上到下写的 样例能通过 但是 测试结果是错的。。。谁发现哪里错了 麻烦告知下 thanks
#include <iostream> #include <cmath> #include <algorithm> using namespace std ; int main() { int t ; cin >> t ; while(t--) { int n ; cin >> n ; int a[102][102]={0} ; for ( int i = 1 ; i <= n ; ++i) for ( int j = 1 ; j <=i ; ++j) { cin >> a[i][j]; } for ( int i = 1 ; i<=n ; ++i) { a[i][0] = 0 ; a[i][i+1] = 0 ; } for ( int i = 2 ; i <= n ; ++i) for ( int j = 1 ; j <= i ; ++j) { a[i][j] += max(a[i-1][j],a[i-1][j-1]); } cout << *max_element(&a[5][0],&a[5][5]) << endl ; } return 0 ; }