代码如下:
#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;
}