首页 > 其他 > 详细

hdu 5791 (DP) Two

时间:2016-08-05 00:37:53      阅读:271      评论:0      收藏:0      [点我收藏+]

hdu 5791

Two

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1421    Accepted Submission(s): 630


Problem Description
Alice gets two sequences A and B. A easy problem comes. How many pair of sequence A‘ and sequence B‘ are same. For example, {1,2} and {1,2} are same. {1,2,4} and {1,4,2} are not same. A‘ is a subsequence of A. B‘ is a subsequence of B. The subsequnce can be not continuous. For example, {1,1,2} has 7 subsequences {1},{1},{2},{1,1},{1,2},{1,2},{1,1,2}. The answer can be very large. Output the answer mod 1000000007.
 

Input
The input contains multiple test cases.

For each test case, the first line cantains two integers N,M(1≤N,M≤1000). The next line contains N integers. The next line followed M integers. All integers are between 1 and 1000.
 

Output
For each test case, output the answer mod 1000000007.
 

Sample Input
3 2 1 2 3 2 1 3 2 1 2 3 1 2
 

Sample Output
2 3
 

求两个序列的相同的公共子序列的个数,取模。

DP[i][j]表示到a数组的第 i 个和b数组的第 j 个之间的个数,可以归纳出,当a[i]==b[j]时,dp[i][j]=dp[i-1][j]+dp[i][j-1]+1;

当不等的时候,dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1].(仔细琢磨琢磨,会发现很有道理)因为有减法的运算所以最后答案可能出现

负数,注意处理一下。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 typedef long long ll;
 8 const int mod = 1000000007;
 9 ll dp[1010][1010];
10 int a[1010],b[1010];
11 
12 int main()
13 {
14     int n,m;
15     while (~scanf("%d%d",&n,&m)){
16         for (int i=1 ; i<=n ; i++) scanf("%d",&a[i]);
17         for (int i=1 ; i<=m ; i++) scanf("%d",&b[i]);
18         memset(dp,0,sizeof(dp));
19         for (int i=1 ; i<=n ; i++){
20             for (int j=1 ; j<=m ; j++){
21                 if (a[i]==b[j]) dp[i][j]=dp[i-1][j]+dp[i][j-1]+1;
22                 else dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1];
23                 dp[i][j]%=mod;
24             }
25         }
26         printf("%I64d\n",(dp[n][m]+mod)%mod);
27     }
28     return 0;
29 }

 

 

hdu 5791 (DP) Two

原文:http://www.cnblogs.com/JJCHEHEDA/p/5738830.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!