http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=6
分析: 最长单调子序列(非递增)。
dp方程: dp[i]= max(dp[j]) +1, j<i && dp[j]>=dp[i] && a[i]<=a[j] (即满足单调条件)
dp[i] 在第i个位置的最长单调子序列,因此初始都为1.
代码:
#include <iostream>
#include <string>
#include <stdio.h>
#include <sstream>
using namespace std;
int a[24];
int dp[24];
int main()
{
// freopen("in.txt","r",stdin);
int n=0;
string s;
getline(cin,s);
stringstream ss;
ss.clear();
ss<<s;
while(1){
ss>>a[n++];
if(ss.fail()) break;
}
n--;
fill(dp,dp+n,1);
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(a[i]<=a[j] && dp[i]<=dp[j])
dp[i]=dp[j]+1;
}
}
int mmax=0;
for(int i=0;i<n;i++)
if(mmax<dp[i]) mmax=dp[i];
printf("%d\n",mmax);
return 0;
}