题解出处:http://blog.csdn.net/a995549572/article/details/50829875
题目大致意思就是给你两个字符串,求出这两个字符串的最长子序列;
主要还是找状态转移方程式;辅助图帮助理解(但是我赶脚这个图还是带自己划一下才能好好的理解状态转移方程式)
if(a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
#include <iostream> #include <stdio.h> #include <algorithm> #include <math.h> #include <string.h> using namespace std; int a[1002],dp[1002][1002]; int main() { char a[1002],b[1002]; while(scanf("%s%s",a,b)!=EOF) { int i,j; int len=strlen(a); int le=strlen(b); memset(dp,0,sizeof(dp)); for(i=1; i<=len; i++) { for(j=1; j<=le; j++) { if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } printf("%d ",dp[len][le]); } return 0; }
dp题,注意以%s输入的时候数组是从0开始存的.....
马上天梯赛了 选拔赛类时候出个这就懵逼了,还是带狂刷一波题啊.............