zoj1733
来源:互联网 发布:2016中超网络直播乐视 编辑:程序博客网 时间:2024/05/17 04:34
水题的确是水题,不过数组开的小了,它会直接wa掉,而不是SE,我的方法依然很老,套式子,我找到一个好方法,是用滚动数组。
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int L;
void LCS(int i,int j,int b[][200])
{
if(i <= 0 || j <= 0) return ;
if(b[i][j] == 1)
{
L++;
LCS(i-1,j-1,b);
}
else if(b[i][j] == 2)
LCS(i-1,j,b);
else LCS(i,j-1,b);
}
void LCSLen(char *x,char *y)
{
int i,j;
int c[200][200],b[200][200];
int lenx = strlen(x+1),leny = strlen(y+1);
for(i = 0;i <= lenx ;++i) c[i][0] = 0;
for(i = 0;i <= leny ;++i) c[0][i] = 0;
for(i =1;i <= lenx;++i)
{
for(j = 1;j <= leny;++j)
{
if(x[i] == y[j])
{
c[i][j] = c[i-1][j-1] + 1;
b[i][j] =1;
}
else if(c[i-1][j] > c[i ][j -1])
{
c[i][j] = c[i -1][j];
b[i][j] = 2;
}
else
{
c[i][j] = c[i ][j -1];
b[i][j]= 3;
}
}
}
LCS(lenx,leny,b);
}
int main(void)
{
int i,j;
char x[200],y[200];
while(cin >> x+1 >> y+1)
{
L = 0;
LCSLen(x,y);
cout << L << endl;
}
system("pause");
return 0;
}
下面用的是滚动数组:::
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
char x[300],y[300];
int r[300],s[300];
int lenx,leny,i,j;
while(cin >> x >> y)
{
lenx = strlen(x);
leny = strlen(y);
for(i = 0;i <= leny;++i) r[i] = 0;
for(i = 0;i < lenx;++i)
{
for(j = 0;j < leny;++j)
if(x[i] == y[j]) s[j+1] = r[j]+1;
else s[j+1] = r[j+1] > s[j] ? r[j+1] : s[j];
for(j = 1;j <= leny;++j)
r[j] = s[j];
}
cout << r[leny] << endl;
}
system("pause");
return 0;
}
- zoj1733
- zoj1733
- ZOJ1733
- zoj1733
- ZOJ1733-Common Subsequence
- 无聊写的POJ3624&&ZOJ1733
- ZOJ1733 POJ1458 Common Subsequence,经典DP问题
- POJ 3132
- MyEclipse6.0 使用方便设置及性能优化
- 浅谈SQL命名与注释规范
- 收集IT公司面试题
- 关于Graph cuts的简介及相关资源
- zoj1733
- 编写一个简单的proc文件
- 用UltraISO制作U盘启动盘
- 当按回车键,焦点自动跳到下一个文本框代码
- 我们的Android学习轨迹
- 打造自己的专属linux(四):Linux内核编译过程简介
- 当把鼠标放上去以后呈手型代码
- 冒泡排序和直接插入算法(java语言)
- JNI完全手册