#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int n,dp[2005],ans=-0x7fffffff;
char c[2005][80];
bool check(int a,int b){
for(int i=0;i<strlen(c[a]);i+=1){
if(c[a][i]!=c[b][i]){
return 0;
}
}
return 1;
}
int main(){
cin>>n;
for(int i=1;i<=n;i+=1) cin>>c[i];
dp[1]=1;
for(int i=2;i<=n;i+=1){
int tmp=0;
for(int j=i-1;j>=1;j-=1){
if(check(j,i)){
if(dp[j]>tmp) tmp=dp[j];
}
}
dp[i]=tmp+1;
}
for(int i=1;i<=n;i+=1) ans=max(ans,dp[i]);
cout<<ans;
return 0;
}
70pt代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int n,dp[2005],ans=-0x7fffffff;
char c[2005][80];
bool check(int a,int b){
for(int i=0;i<strlen(c[a]);i+=1){
if(c[a][i]!=c[b][i]){
return 0;
}
}
return 1;
}
int main(){
cin>>n;
for(int i=1;i<=n;i+=1) cin>>c[i];
dp[1]=1;
for(int i=2;i<=n;i+=1){
for(int j=i-1;j>=1;j-=1){
if(check(j,i)){
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);
}
cout<<ans;
return 0;
}