siyu0816 @ 2023-07-29 17:51:31
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,a[1001]={0},f[1001]={0},i,j,max1;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
f[n]=1;//DP的出口,最后一个人单独处理 (没有合伙人)
for(i=n-1;i>=1;i--)//从倒数第2个......到第1个
{
max1=0;//如果=没有合伙人,+0
for( j=i+1;j<=n;j++ )//找潜力最大的合伙人--j
if(a[i]<=a[j]&&f[j]>max1)//和最长上升不一样的地方
max1=f[j];//合伙人中潜力最大值
f[i]=1+max1;
}//end for
max1=0;
for(i=1;i<=n;i++)//把所有人的潜力扫描一下
if(f[i]>max1)
max1=f[i];
cout<<max1<<endl;
return 0;
}
by return_TLE @ 2024-02-24 21:21:32
@siyu0816 第二问和第三问呢?