....海枯石烂了 做出个dp...虽然这个dp是那么水... but enough
这题 只要读懂了题意就是了
其实我做的时候感觉是将LIS O(n^2)的算法思想涌过来就空余了 虽然这里不是求最长 而是求沿途值最大
这里我写了2种 第2种对于ans的求解 在dp[i]计算的时候 求得 可以节省了一个for的时间 差了15ms吧
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 const int size = 1010; 6 int dp[size]; 7 int val[size]; 8 9 int main() 10 { 11 int n , ans; 12 while( cin >> n && n ) 13 { 14 ans = 0; 15 for( int i = 1 ; i<=n ; i++ ) 16 { 17 cin >> val[i]; 18 dp[i] = val[i]; 19 } 20 for( int i = 1 ; i<=n-1 ; i++ ) 21 { 22 for( int j = i+1 ; j<=n ; j++ ) 23 { 24 if( val[j] > val[i] ) 25 { 26 dp[j] = max( dp[j] , val[j] + dp[i] ); 27 } 28 } 29 } 30 for( int i = 1 ; i<=n ; i++ ) 31 { 32 ans = ans > dp[i] ? ans : dp[i]; 33 } 34 cout << ans << endl; 35 } 36 return 0; 37 }
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 const int size = 1010; 6 int dp[size]; 7 int val[size]; 8 9 int main() 10 { 11 int n , ans; 12 while( cin >> n && n ) 13 { 14 ans = 0; 15 for( int i = 1 ; i<=n ; i++ ) 16 { 17 cin >> val[i]; 18 dp[i] = val[i]; 19 } 20 for( int i = 1 ; i<=n ; i++ ) 21 { 22 for( int j = i+1 ; j<=n ; j++ ) 23 { 24 if( val[j] > val[i] ) 25 { 26 dp[j] = max( dp[j] , val[j] + dp[i] ); 27 } 28 } 29 ans = ans > dp[i] ? ans : dp[i]; 30 } 31 cout << ans << endl; 32 } 33 return 0; 34 }