hdu5282 最长公共子序列
来源:互联网 发布:java 图片添加文字 编辑:程序博客网 时间:2024/06/06 05:10
这道题不错,怎么说呢,又是一到让我涨姿势的题(因为不会做)
#include <string.h> #include <stdio.h> #include <iostream> #include <stdlib.h> #include <memory.h> #include <cmath> #include <algorithm> using namespace std; #define ll long long const int mod = 1e9+7; char a[1010]; char b[1010]; int dp[1010][1010]; int ans[1010][1010]; int last[200]; int main(){ int t; cin>>t; while(t--){ memset(dp,0,sizeof(dp)); memset(ans,0,sizeof(ans)); memset(last,0,sizeof(last)); scanf("%s%s",a+1,b+1); int lena=strlen(a+1); int lenb=strlen(b+1); for(int i=0;i<=max(lena,lenb);i++){ ans[i][0]=1; ans[0][i]=1; } for(int i=1;i<=lena;i++){ for(int j=1;j<=lenb;j++){ if(a[i]==b[j]){ dp[i][j]=dp[i-1][j-1]+1; } dp[i][j]=max(dp[i][j],dp[i-1][j]); dp[i][j]=max(dp[i][j],dp[i][j-1]); } } for(int i=1;i<=lena;i++){ memset(last,0,sizeof(last)); for(int j=1;j<=lenb;j++){ if(dp[i-1][j]==dp[i][j]){ ans[i][j]=ans[i-1][j]; } last[b[j]]=j; int pos=last[a[i]]; if(pos && dp[i-1][pos-1]+1==dp[i][j]){ ans[i][j]+=ans[i-1][pos-1]; } ans[i][j]%=mod; } } cout<<ans[lena][lenb]<<endl; } return 0; }
0 0
- hdu5282 最长公共子序列
- hdu5282 最长公共子序列的变形
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- c#简单实现记事本功能
- 筛素数
- 【鸟哥的linux私房菜-学习笔记】首次使用相关知识、在线求助 man page
- Douglas Crockford 大神写的 JavaScript 异步控制库:RQ(上)
- 网络编程 笔记(九)Echo客户端 Utniy实现
- hdu5282 最长公共子序列
- Android网络通信框架LiteHttp:简介和教学大纲
- iOS开发常见error
- 我认为还是取决于我自己
- ML—SVM理论深度解析
- python下安装numpy、matplotlib、scipy过程
- 九度OJ 1115:数字求和 (基础题)
- GET请求的中文乱码问题及处理意义
- 小白书部分动规习题