int MSLS(int *array){//最大连续子序列和
int dp[MAX_N];
for(int i=0;i<MAX_N;i++){
if(i==0)
dp[i]=array[i];
else{
dp[i]=max(dp[i-1]+array[i],array[i]);
}
}
return dp[MAX_N-1];
}
int LIS(int *array){//最长不下降子序列和
int ans=-1;
int dp[MAX_N];
for(int i=0;i<MAX_N;i++){
dp[i]=1;//length初始化为1
for(int j=0;j<i;j++){
if(array[i]>=array[j]&&(dp[j]+1>dp[i]))
dp[i]=dp[j]+1;
}
ans=max(ans,dp[i]);
}
return ans;
}
int LCS(int *array1,int *array2){//最长公共子序列
int dp[MAX_N+5][MAX_N+5];
int len1=MAX_N;
int len2=MAX_N;
memset(dp,0,sizeof(dp));
for(int i=1;i<=len1;i++){//array1.len
for(int j=1;j<=len2;j++){//array2.len
if(array1[i]==array2[j]){
dp[i][j]=dp[i-1][j-1]+1;
}
else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
// for(int i=1;i<=len1;i++){//array1.len
// for(int j=1;j<=len2;j++){//array2.len
// cout<<dp[i][j]<<" ";
// }cout<<endl;
// }
return dp[len1][len2];
}
记录下三个最常用的模板