20 ????? DP help!!!

B3637 最长上升子序列

首先,你数组开小了 其次,~~……(省略100字)~~ 我帮你改了一下(注释里为改正前代码) ```cpp #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 sundingjia @ 2024-04-26 21:00:04


|