1 条题解
-
0
C :
#include "stdio.h" #include "string.h" int n,m; char a[5002],b[5002]; int f[2][5001]; int max(int a,int b) { if(a>b) return a; return b; } int main() { int i,j; scanf("%s%s",a,b); n=strlen(a); m=strlen(b); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(a[i-1]==b[j-1]) f[i%2][j]=f[(i-1)%2][j-1]+1; else f[i%2][j]=max(f[(i-1)%2][j],f[i%2][j-1]); } } printf("%d\n",f[n%2][m]); return 0; }
C++ :
//最长公共子序列 #include<iostream> #include<fstream> #include<string> using namespace std; const int N=1005; int f[N][N]={0}; int main() { //ifstream cin("lcs.in"); //ofstream cout("lcs.out"); string s1,s2; cin>>s1>>s2; int len1=s1.size(),len2=s2.size(); for (int i=0;i<len1;i++) f[i][0]=0; for (int j=0;j<len2;j++) f[0][j]=0; for (int i=1;i<=len1;i++) for (int j=1;j<=len2;j++) if (s1[i-1]==s2[j-1]) f[i][j]=f[i-1][j-1]+1; else f[i][j]=max(f[i-1][j],f[i][j-1]); cout<<f[len1][len2]<<endl; //system("pause"); return 0; }
Java :
import java.util.Scanner; public class Main { static String s1,s2; static int[][] dp = new int[1005][1005]; public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ s1 = in.next(); s2 = in.next(); solve(); } } public static void solve() { int size1 = s1.length(); int size2 = s2.length(); if (size1 == 0 || size2 == 0) return ; for (int i = 1; i <= size1; i++) { for (int j = 1; j <= size2; j++) { if (s1.charAt(i - 1) == s2.charAt(j - 1)) dp[i][j] = dp[i - 1][j - 1] + 1; else dp[i][j] = dp[i - 1][j] > dp[i][j - 1] ? dp[i - 1][j] : dp[i][j - 1]; } } System.out.println(dp[size1][size2]); } }
- 1
信息
- ID
- 776
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者