杭电acm 1159,公共子序列问题,我的思路漏掉什么了啊?老是wrong answer网上有人说是动态规划,我怎么没看出来呢……(新手,对该算法还不太懂)我的思路是这样的:读入两个字符串A、B对A的每一

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 15:50:26

杭电acm 1159,公共子序列问题,我的思路漏掉什么了啊?老是wrong answer网上有人说是动态规划,我怎么没看出来呢……(新手,对该算法还不太懂)我的思路是这样的:读入两个字符串A、B对A的每一
杭电acm 1159,公共子序列问题,我的思路漏掉什么了啊?老是wrong answer
网上有人说是动态规划,我怎么没看出来呢……(新手,对该算法还不太懂)
我的思路是这样的:
读入两个字符串A、B
对A的每一个字符
在B里一个个字符匹配
匹配上的话
{公共子序列计数加1;记下B中这个位置,下次就从此处开始匹配;}
然后返回计数值(这就是以A为基准的公共子序列的长度)
然后把A、B位置调换,再做一遍以上过程,得到另一个计数值(以B为基准的)
将这两个值比较,较大的就是所求结果
我这样做测试用例都没问题,我又试了很多例子,也都对了,提交就是wrong answer,把数组扩大也不对,真不知哪里错了,
我的代码也搁这吧,可以结合着看一看
#include
using namespace std;
int sub(char a[1000],char b[1000])
{
int i,j;
int count = 0,find = -1;
for(i=0;a[i]!='\0';i++)
for(j=find+1;b[j]!='\0';j++)
{
if(a[i] == b[j])
{
count ++;
find = j;
break;
}
}
return count;
}
int main()
{
char a[1000],b[1000];
while(cin>>a>>b)
{
int x=sub(a,b),y=sub(b,a);
cout

杭电acm 1159,公共子序列问题,我的思路漏掉什么了啊?老是wrong answer网上有人说是动态规划,我怎么没看出来呢……(新手,对该算法还不太懂)我的思路是这样的:读入两个字符串A、B对A的每一
楼主的思路错了,你的代码我就不看了.
就是动态规划.
辅助空间变化示意图.
a b c f b c
a 1 1 1 1 1 1
b 1 2 2 2 2 2
f 1 2 2 3 3 3
c 1 2 3 3 3 4
a 1 2 3 3 3 4
b 1 2 3 3 4 4
子结构特征:
f(i,j)= 1. f(i-1,j-1)+1 (a[i]==b[j])
或者2. max(f(i-1,j),f(i,j-1)) (a[i]!=b[j])
由于f(i,j)只和f(i-1,j-1), f(i-1,j)和f(i,j-1)有关, 而在计算f(i,j)时, 只要选择一个合适的顺序, 就可以保证这三项都已经计算出来了, 这样就可以计算出f(i,j). 这样一直推到f(len(a),len(b))就得到所要求的解了.
我的AC代码.
#include
#include
#define max(a,b) a>b?a:b
int f[500][500];
int main()
{
char a[500],b[500];
int i,j;
int lena,lenb;
while(scanf("%s %s",a,b)!=EOF)
{
lena=strlen(a);
lenb=strlen(b);
for(i=0;i

杭电acm 1159,公共子序列问题,我的思路漏掉什么了啊?老是wrong answer网上有人说是动态规划,我怎么没看出来呢……(新手,对该算法还不太懂)我的思路是这样的:读入两个字符串A、B对A的每一 杭电acm 1005的一点疑惑程序已ac,但是就问题本身而言还是有点疑惑,这题目主要是找两个数跟第1,2 数相同,周期循环,但会不会出现如下的情况(仅仅是我打的比方)序列如下1,1,3,8,2,6,1,5,6,1,5,6,1 杭电ACM 2019 数列有序问题 输出错误Problem Description有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input输入数据包含多 杭电acm 什么思路啊 求两个数列的所有公共子序列.算法设计 求两个数列的所有公共子序列 注意 不是最长公共子序列.时间复杂度越小越好一共就20个财富值,或提供下思路. 杭电acm 1008 题我的为什么是wrong answer acm 1008 杭电 什么意思请帮我解释一下,谢谢!题目地址 http://acm.hdu.edu.cn/showproblem.php?pid=1008 动态规划算法找出两个序列的最长公共子序列 用C加加 最好详细说明 最长公共子序列(不要求连续)求长度,时间复杂度O(n+m) 为什么杭电acm 1013结果就是mod9的余数,这道题我的思路就是很土很土的办法,; 杭电acm第3809题的详细思路 杭电ACM 3809的详细解题思路是什么 杭电ACM第2136题Largest prime factor, 杭电acm怎么查看自己ac过的代码 用matlab求一个序列的所有子序列的那个程序我发现还有问题.如果序列长度为N,则所有求得的子序列的个数是2^N-1.我用nchoosek函数写了一个发现没求完整.对于X=‘abcd’不能求到15个只能到13个. 杭电ACM 2019 数列有序 输出错误Problem Description有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序. Input输入数据包含多个测 ACM动态规划的简单问题如图所示,那个F[i]到底是怎么一个规律,为什么第一个2线面的f[i]是2,而不是3,到这个2为止,1 4 7 2,最长有序子序列的长度是3啊,所以2下面的f[i]为3啊.这个到底怎么回事啊? 杭电acmd 字打错了,是 杭电acm的超时是什么意思