HDU--1087増加が最も長いサブシーケンス(DP)を合計する

アドレス:http : //acm.hdu.edu.cn/showproblem.php?pid=1087

 

    質問の意味:この例は非常に誤解を招くものです。この質問の意味は、最初から最後までジャンプし、ジャンプを増やし続け、最も多くスコアを付けることです。開始点と終了点はスコアリングされないことに注意してください。

    分析:テンプレートを変更するだけで、シーケンスの長さが以前に求められていました。ここでまとめると、dpが[]で初期化されている限り、各数値が選択されているかどうかについて話し合います。伝達方程式:

  if(a [i]> a [j])
  dp [i] = max(dp [i]、dp [j] + a [i])
#include <iostream> 
#include <cstdio> 
#include <algorithm> 
#include <cstring>
 using  namespace std;
const  int maxn = 1e6 + 10 ; 
typedef long  long ll; 
ll a [maxn]; 
ll dp [maxn]; 
int main()
{ 
    ll n; 
    while(cin >> n)
    { 
        if(n == 0 break ;
        forint i = 0   ; i <n; i ++ 
            cin >>a [i];
        forint i = 0 ; i <n; i ++ 
            dp [i] = a [i]; 
        ll maxx = -1 ; 
        ll sum = 0 ;
        forint i = 1 ; i <n; i ++ 
        { 
            forint j = 0 ; j <i; j ++ 
            { 
                if(a [i]> a [j])
                { 
                    dp [i] = max(dp [ i]、dp [j] + a [i]); 
                }
            }
            maxx = max(dp [i]、maxx); 
        } 
        cout << maxx << endl; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/liyexin/p/12683114.html