20 ????? DP help!!!

B3637 最长上升子序列

_Geburah @ 2024-04-16 21:33:24


#include<bits/stdc++.h>
using namespace std;
int n;
int arr[1001];
int dp[1001]={1,1};
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>arr[i];
    for(int i=1;i<=n;i++)
    {
        int dpj=-1,jj=0;
        for(int j=1;j<=i;j++)
        {
            if(dp[j]>dpj)
            {
                dpj=dp[j];
                jj=j;   
            }
        }
        if(arr[i]>arr[jj])
        {
            dp[i]=dp[jj]+1;
            //cout<<jj;
        }
    }
    sort(dp+1,dp+1+n);
    cout<<dp[n];
}

by sundingjia @ 2024-04-26 21:00:04

首先,你数组开小了
其次,……(省略100字)
我帮你改了一下(注释里为改正前代码)

#include<bits/stdc++.h>
using namespace std;
int n;
int arr[/*1001,范围小了*/5001];
int dp[/*1001,同上*/5001]/*={1,1}不能这样初始化*/;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>arr[i];
    for(int i=1;i<=n;i++)dp[i]=1;//正确初始化的方法
    for(int i=/*1,1你已经设过了*/2;i<=n;i++)
    {
        int dpj=/*-1,jj=0,没看懂*/arr[i];
        for(int j=1;j<=i;j++)
        {
            if(/*dp[j]>,what do you want to do?*/arr[j]<dpj)
            {
                //dpj=dp[j];同上。
                dp[i]=max(dp[i],dp[j]+1);
                //jj=j; 同上。
            }
        }
//      if(arr[i]>arr[jj])
//      {
//          dp[i]=dp[jj]+1;
//          //cout<<jj;
//      }
//what do you want to do?
    }
    sort(dp+1,dp+1+n);
    cout<<dp[n];
    /*最好写上return 0*/return 0;
}

无耻的求关


by _Geburah @ 2024-06-01 12:00:46

<a>


|