关于#c++#的问题,请各位专家!

代码如下:


#include <iostream>
#include <cstring>
#define N 100000
using namespace std;

int dp[N];
int num[N];

int Max(int a,int n){
    int m = 0;
    for(int i = a; i < n; i++){
        if(num[i] < num[i+1]){
            if(m < dp[i+1]){
                m = dp[i+1];
            }
        }
    }
    return m;
}

int DP(int n){
    int M = 0;
    dp[n] = 1;
    for(int i = n - 1; i >= 1; i--){
        dp[i] = Max(i,n) + 1;
        if(M < dp[i])M = dp[i];
    }
    return M;
}

int main(){
    int n;
    while(cin >> n){
        memset(dp,0,sizeof(dp));
        memset(num,0,sizeof(num));
        for(int i = 1; i <= n; i++){
            cin >> num[i];
        }
        cout << DP(n) << endl;
    }
    return 0;
}

啥问题

你的问题是啥

建议做成动态数组,max啥意思没看懂,题目发出来看看。

 
#include <iostream>
#include <cstring>
//#define N 100000
using namespace std;
int *dp;//dp[N];
int *num;//num[N];
int Max(int a,int n){
    int m = 0;
    for(int i = a; i < n; i++){
        if(num[i] < num[i+1]){
            if(m < dp[i+1]){
                m = dp[i+1];
            }
        }
    }
    return m;
}
int DP(int n){
    int M = 0;
    dp[n] = 1;
    for(int i = n - 1; i >= 1; i--){
        dp[i] = Max(i,n) + 1;
        if(M < dp[i])M = dp[i];
    }
    return M;
}
int main(){
    int n;
    while(cin >> n){
        dp=new int[n+1];//memset(dp,0,sizeof(dp));
        num=new int[n+1];//memset(num,0,sizeof(num));
        
        for(int i = 1; i <= n; i++){
            cin >> num[i];
        }
        cout << DP(n) << endl;
        delete[] dp;
        delete[] num;
    }
    return 0;
}