最长公共子序列
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX 1001
int dp[MAX][MAX];
char a[MAX],b[MAX];
int main()
{
while(~scanf("%s%s",a,b))
{
memset(dp,0,sizeof(dp));
int s=-1;
int lena=strlen(a),lenb=strlen(b);
for(int i=1;i<=lena;i++)
{
for(int j=1;j<=lenb;j++)
{
if(a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
if(s<dp[i][j])
s=dp[i][j];
}
}
cout<<s<<endl;
}
return 0;
}
最大连续字符串数
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX 1001
int dp[MAX][MAX];
char a[MAX],b[MAX];
int main()
{
while(~scanf("%s%s",a,b))
{
memset(dp,0,sizeof(dp));
int s=-1;
int lena=strlen(a),lenb=strlen(b);
for(int i=1;i<=lena;i++)
{
for(int j=1;j<=lenb;j++)
{
if(a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1]+1;
if(s<dp[i][j])
s=dp[i][j];
}
}
cout<<s<<endl;
}
return 0;
}
最大上升序列长度
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
bool cmp(int x,int y){
return x>y;
}
int main()
{
int a[100],max1[100];
for(int i=0;i<10;i++)
{
cin>>a[i];
max1[i]=1;
}
for(int i=1;i<10;i++)
{
for(int j=0;j<i;j++)
{
if(a[i]<a[j])
max1[i]=max(max1[i],max1[j]+1);
}
}
sort(max1,max1+10,cmp);
cout<<max1[0];
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=0;j<i;j++)
if(a[i]>a[j]) f[i]=max(f[i],f[j]+1);
a[n+1]=0;
for(int i=n;i;i--)
for(int j=n+1;j>i;j--)
if(a[i]>a[j]) f[i]=max(f[i],f[j]+1);
}