先上状态转移方程,还是很容易看明白的

例题是Codevs的1862,这个题不是实现了方程就可以了的,还要完成一个事情那就是计数,数一数到底有多少个最长公共子序列

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
const int p=1e8;
char a[maxn],b[maxn];
int dp[maxn][maxn],f[maxn][maxn];
int main()
{
scanf("%s%s",a+,b+);
int al=strlen(a+)-;
int bl=strlen(b+)-;
for(int i=;i<=al;i++) f[i][]=;
for(int i=;i<=bl;i++) f[][i]=;
for(int i=;i<=al;i++)
for(int j=;j<=bl;j++)
{
if(a[i]==b[j])
{
dp[i][j]=dp[i-][j-]+;
int k1=,k2=;
if(dp[i][j]==dp[i-][j]) k1=;
if(dp[i][j]==dp[i][j-]) k2=;
f[i][j]=f[i-][j-]+(k1*f[i-][j])+(k2*f[i][j-]);
f[i][j]=(f[i][j]+p)%p;
}
else
{
dp[i][j]=max(dp[i-][j],dp[i][j-]);
int k1=,k2=,k3=;
if(dp[i][j]==dp[i-][j]) k1=;
if(dp[i][j]==dp[i][j-]) k2=;
if(dp[i][j]==dp[i-][j-]) k3=;
f[i][j]=(k1*f[i-][j])+(k2*f[i][j-])-(k3*f[i-][j-]);
f[i][j]=(f[i][j]+p)%p;
}
}
printf("%d\n%d\n",dp[al][bl],f[al][bl]);
return ;
}

在这里我们用dp记录长度,用f记录个数

由于输入是以“.”结尾的,所以读入的时候有些许的变化

    scanf("%s%s",a+,b+);
int al=strlen(a+)-;
int bl=strlen(b+)-;

这样读入的时候真正的字符串的下标是从a+1开始的,循环的时候从1开始循环,到strlen(a+1)结束

因为结尾字符不属于串,所以给al--就好了

最新文章

  1. 如何将 Windows Server 2012 r2 打造成 Windows 8.1?
  2. 数据结构:链表(python版) 续:增加比较函数
  3. 【USACO 2.3】Money Systems(dp)
  4. StringUtils
  5. Gson 和 FastJson 性能测试
  6. php获取json文件数据并动态修改网站头部文件meta信息 --基于CI框架
  7. JSON入门实例
  8. JSON基础使用
  9. http://www.cnblogs.com/leiOOlei/p/5075402.html
  10. 获取ListControl控件中(复选框)CheckBox的状态
  11. 面试题25:最小的K个数
  12. PocketSphinx语音识别系统语言模型的训练和声学模型的改进
  13. 【iOS】UIViewController生命周期
  14. 【解决】System.Web.Http.Description 缺失
  15. spring 页面跳转
  16. Android特效专辑(二)——ViewPager渲染背景颜色渐变(引导页)
  17. 动手写 js 沙箱
  18. ejabberd之开题篇
  19. Less 编译生成 css
  20. SQL 两个时间获取相差秒数

热门文章

  1. IdFTP中FEAT命令的问题
  2. [bzoj5158][Tjoi2014]Alice and Bob
  3. 2007: [Noi2010]海拔
  4. 4299: Codechef FRBSUM
  5. es同步mysql同步-logstash
  6. Word中使用宏调整表格
  7. Unity3d脚本生命周期
  8. BZOJ1270[BJWC2008]雷涛的小猫
  9. CSP201312-1:出现次数最多的数
  10. HTTPS初始