| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
30题留念~大家注意:用g++越界问题可以忽略。还有,那位神牛解释一下我的初值为什么错了?我在自己机子上跑样例都过不了,交上去ac~我机子上也是g++阿,真bug
本来我自作聪明, 加了这句话:if (s1[0]==s2[0]) f[0][0] = 1;然后就直接从1开始做
以为是对的,但是居然wa了!!那位神牛解释一下!
Source Code
Problem: 1458 User: fyq
Memory: 4272K Time: 32MS
Language: G++ Result: Accepted
* Source Code
#include <cstdio>
#include <cstring>
using namespace std;
char s1[1001],s2[1001];
int f[1001][1001];
int l1,l2;
void work()
{
memset(f,0,sizeof(f));
if (s1[0]==s2[0]) f[0][0] = 1;
for (int i=0;i<l1;i++)
for (int j=0;j<l2;j++)
{
f[i][j] = f[i-1][j-1];
if (s1[i]==s2[j])
f[i][j] = f[i-1][j-1] + 1;
if (f[i][j]<f[i-1][j]) f[i][j] = f[i-1][j];
if (f[i][j]<f[i][j-1]) f[i][j] = f[i][j-1];
}
printf("%d\n",f[l1-1][l2-1]);
}
int main()
{
while (scanf("%s%s",s1,s2)!=EOF)
{
//printf("%s\n%s\n",s1,s2);
l1 = strlen(s1); l2 = strlen(s2);
work();
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator