0分,大佬求助

B3637 最长上升子序列

hanwud @ 2023-09-27 12:59:49

#include<bits/stdc++.h>
using namespace std;
int n,a[50000],ans=0;

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
      for(int j=1;j<=i-1;j++)
      {
        if(a[j]>a[i])
        {
            a[i]=max(a[j]+1,a[i]);
            ans++;
        }
        else continue;
      }
    cout<<ans;
    return 0;
}

by Michael_Liu @ 2023-09-27 13:27:26

@Aa111112 你这……

a是原数列,你咋在a数组上进行统计呢?

还有,这求的不是上升子序列吗,那判断的就应该是a[j]<a[i]才能转移啊

建议看看多看看基础dp

已AC:

#include<bits/stdc++.h>
using namespace std;
int n,a[50000],ans=0,dp[50000];

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        dp[i]=1;
    } 
    for(int i=1;i<=n;i++)
      for(int j=1;j<=i-1;j++)
      {
        if(a[j]<a[i])
        {
            dp[i]=max(dp[j]+1,dp[i]);
            ans=max(ans,dp[i]);
        }
      }
    cout<<ans;
    return 0;
}

by hanwud @ 2023-09-27 13:42:13

谢谢大佬


|