HDU 1087 Super Jumping! Jumping! Jumping!

\(LCS\)简单变形

状态表示:\(f(i)\)\(1~i\)中最长上升子序列的和值。
状态转移:
\(f(i)=\begin{cases} a[1],i = 1\\max(f(k)+a[i]),1≤k<i \&\& a[i]>a[k] \end{cases}\)

const int N=1010;
int f[N];
int a[N];
int n;

int main()
{
    while(cin>>n)
    {
        if(!n) break;

        for(int i=0;i<n;i++) cin>>a[i];

        for(int i=0;i<n;i++)
        {
            f[i]=a[i];
            for(int j=0;j<i;j++)
                if(a[i] > a[j] && f[i]<f[j]+a[i])
                    f[i]=f[j]+a[i];
        }

        int res=0;
        for(int i=0;i<n;i++)
            res=max(res,f[i]);
        cout<<res<<endl;
    }
    //system("pause");
}
原文地址:https://www.cnblogs.com/fxh0707/p/14161052.html