hdu--1087--dp

....海枯石烂了  做出个dp...虽然这个dp是那么水... but enough

  touch   me

这题 只要读懂了题意就是了 

其实我做的时候感觉是将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 }
View Code
 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 }
View Code
just follow your heart
原文地址:https://www.cnblogs.com/radical/p/3881244.html