UVA 10069 dp+高精度
2016-04-04 17:06
176 查看
【题意】给了你两个字符串s1,s2,问你s2在s1中出现的次数,注意是子序列就行了,不一定要连续.
【分析】显然是个dp!
【状态表示】dp[i][j]代表s1串中的前i个字符和字符串2中的前j个字符匹配的最大值。
【状态转移 】dp[i][j] = dp[i-1][j] (s[i-1]!=s[j-1]),dp[i][j] = dp[i][j]+dp[ii-1][j-1],(s1[i-1]==s2[j-1]);
【坑点】高精度,这里用java整的,真是坑!!!
【AC代码】
package Main;
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args){
int T,i,j,k;
String s1,s2;
BigInteger dp[][] = new BigInteger[10010][110];
Scanner cin=new Scanner(System.in);
T=cin.nextInt();
for(k=1; k<=T; k++)
{
s1 = cin.next();
s2 = cin.next();
int len1 = s1.length();
int len2 = s2.length();
for(i=0; i<=len1; i++)
for(j=0; j<=len2; j++)
dp[i][j]=BigInteger.ZERO;
for(i=0; i<=len1; i++)dp[i][0] = BigInteger.ONE;
for(i=1; i<=len1; i++)
{
for(j=1; j<=len2; j++)
{
dp[i][j] = dp[i-1][j];
if(s1.charAt(i-1)==s2.charAt(j-1))
{
dp[i][j]=dp[i][j].add(dp[i-1][j-1]);
}
}
}
System.out.println(dp[len1][len2]);
}
}
}
【分析】显然是个dp!
【状态表示】dp[i][j]代表s1串中的前i个字符和字符串2中的前j个字符匹配的最大值。
【状态转移 】dp[i][j] = dp[i-1][j] (s[i-1]!=s[j-1]),dp[i][j] = dp[i][j]+dp[ii-1][j-1],(s1[i-1]==s2[j-1]);
【坑点】高精度,这里用java整的,真是坑!!!
【AC代码】
package Main;
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args){
int T,i,j,k;
String s1,s2;
BigInteger dp[][] = new BigInteger[10010][110];
Scanner cin=new Scanner(System.in);
T=cin.nextInt();
for(k=1; k<=T; k++)
{
s1 = cin.next();
s2 = cin.next();
int len1 = s1.length();
int len2 = s2.length();
for(i=0; i<=len1; i++)
for(j=0; j<=len2; j++)
dp[i][j]=BigInteger.ZERO;
for(i=0; i<=len1; i++)dp[i][0] = BigInteger.ONE;
for(i=1; i<=len1; i++)
{
for(j=1; j<=len2; j++)
{
dp[i][j] = dp[i-1][j];
if(s1.charAt(i-1)==s2.charAt(j-1))
{
dp[i][j]=dp[i][j].add(dp[i-1][j-1]);
}
}
}
System.out.println(dp[len1][len2]);
}
}
}
相关文章推荐
- 非常可乐(bfs)
- 获取程序执行时间的两种方法
- 在全球经济持续低迷情况下,看唯品会如何逆袭
- Linux内核转发技术
- Bitmap和BitmapFactory对象使用
- CentOS6.5 ping: unknown host 解决方法
- 倒排文件索引结构和搜索算法
- 剑指offer面试题 求二叉数的深度
- 往手机插入联系人
- RAII&智能指针
- Android之LayoutInflater
- 数据结构2
- 标准C语言关键知识回顾
- -bash: rz: command not found
- 设计模式C++生成器模式
- 数据存储--SQLite创建数据库
- 简化理解之:关键字synchronize
- javascript小方法之数组去重、数字转成逗号分隔、html元素去标签
- 120. Triangle
- 获取系统的相关信息