\(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");
}