hdu5791 TWO

题意

给你两个数串

问你两个数串有多少子串一致

子串不一定是连续的

解法

我们设 \(dp[i][j]\) 表示A串匹配到 i 位,B串匹配到 j 位,一致的子串数。那么我们有转移方程:

\(dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]\)

而如果 \(a[i]==b[j]\) 的话,我们还要加上 \(dp[i-1][j-1] + 1\) 。这样就完了。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cctype>
#include <vector>
#define INF 2139062143
#define MAX 0x7ffffffffffffff
#define del(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
template
inline void read(T&x)
{
x=0;T k=1;char c=getchar();
while(!isdigit(c)){if(c=='-')k=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}x*=k;
}
const int maxn=1000+5;
const int mod=1e9+7;
int mul(int x,int y) {return 1ll*x*y%mod;}
int add(int x,int y) {return (x+y)%mod;}
int pul(int x,int y) {return (x-y+mod)%mod;}
int dp[maxn][maxn];
int a[maxn],b[maxn];
int n,m; int main()
{
while(~scanf("%d %d",&n,&m)) {
del(dp,0);
for(int i=1;i<=n;i++) read(a[i]);
for(int i=1;i<=m;i++) read(b[i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(a[i]!=b[j])
dp[i][j]=pul(add(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]);
else
dp[i][j]=add(add(dp[i-1][j],dp[i][j-1]),1);
}
printf("%d\n",dp[n][m]);
}
return 0;
}

hdu5791 TWO的更多相关文章

  1. 多校联合训练&hdu5791 Two

    hdu5791 dp[i][j]表示的是序列A前i个数字和序列B前j个数字的公共子序列的总个数,那么的dp公式就可以这么表示 理解一下此公式若最尾部的a[i]和b[j]相等的话,那么单独的a[i]和b ...

  2. hdu5791(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5791 参考博客:https://blog.csdn.net/wuxuanyi27/article/de ...

  3. 2016 Multi-University Training Contest 5 1011 Two DP

    http://acm.hdu.edu.cn/showproblem.php?pid=5791 HDU5791 Two 题意 :两个数组,多少个不连续子串相等 思路: dp[i][j] :a串i结尾,b ...

随机推荐

  1. 自己对WEBGL坐标系的转换过程的理解【如图】

  2. POJ 2115 C Looooops( 简单拓欧 + 快速幂 )

    链接:传送门 题意:题目中给出一个循环 for (variable = A; variable != B; variable += C) ,这个东东还需要 mod 2^k 问至少多次能退出,如果进入死 ...

  3. Spring 的IOC和DI

    IOC:IOC其实就是一种容器,该容器会主动的将资源推送给他所管理的组件, 组件所要做的仅是一种合适的方式来接受资源,这种行为也被称为查找的被动形式! IOC的反转控制:传统应用程序是由我们自己在对象 ...

  4. C#中的DES加密

    publicstaticstringEncryptString(string sInputString,string sKey,string sIV) { try { byte[] data =Enc ...

  5. 对thinkpad太失望了

    本来本着对thinkpad的信任买的,结果买回来一直吱吱吱吱响个不停. 好像是磁盘的问题,太垃圾了. http://benyouhui.it168.com/thread-1111376-1-1.htm ...

  6. HDU 4349

    想了好久,没思路.看别人说是卢卡斯,就去看卢卡斯了,看完卢卡斯,再用它推导一下,很容易就知道,答案是2^n的二进制中一的个数.改天找个时间写个卢卡斯的总结.~~~今晚竟然要上形势政治课,靠.... # ...

  7. My SQL中show命令--MySQL中帮助查看

    My SQL中show命令--MySQL中帮助查看 学习了:http://hahaxiao.techweb.com.cn/archives/477.html 在mysql命令界面内,输入help或者? ...

  8. js面向对象编程: js类定义函数时prototype和this差别?

    在面向对象编写js脚本时,定义实例方法主要有两种 例如以下: function ListCommon2(afirst) { var first=afirst; this.do1=function () ...

  9. Java - 经常使用函数Random函数

    http://blog.csdn.net/pipisorry/article/details/44411541 Random()函数生成随机数 java.util.Random 在Java的API帮助 ...

  10. mysql安装出错cannot create windows service for mysql.error:0

    配置时最后一步出现不能启动mysql 解决成功的办法:[MySQL] Could not start the service MySQL 解决方法 安装mysql 5.1.33,在运行Server I ...