社区讨论
为啥不能用getline?
学术版参与者 4已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi8ew7jo
- 此快照首次捕获于
- 2025/11/21 13:20 4 个月前
- 此快照最后确认于
- 2025/11/21 15:31 4 个月前
题目如下。
题目描述
一个给定的子序列是在该序列中删去若干元素后得到的序列。例如,序列 是序列 的子序列。
给定两个序列 X 和 Y,当另一序列 Z 既是 X 的子序列又是 Y 的子序列时,称 Z 是序列 X,Y 的公共子序列。
求给定的两个序列中,最长公共子序列的长度。
输入
共两行,分别表示两个序列,序列长度均小于 1000。
输出
一个整数,即两个序列的公共子序列的长度。
输入数据 1
CPPaabaaecd
abcd
输出数据 1
CPP4
本人代码如下。
错误代码:
CPP//998244353
#include<bits/stdc++.h>
#define itn int
using namespace std;
const int N=1010;
int dp[N][N];
string a,b;
int main()
{
memset(dp,0,sizeof(dp));
getline(cin,a);
getline(cin,b);
for(int i=0;i<a.size();i++)
{
for(int j=0;j<b.size();j++)
{
if(a[i]==b[j])
{
dp[i+1][j+1]=dp[i][j]+1;
}
dp[i+1][j+1]=max({dp[i+1][j+1],dp[i][j+1],dp[i+1][j]});
}
}
cout<<dp[a.size()][b.size()];
}
正确代码:
CPP//998244353
#include<bits/stdc++.h>
#define itn int
using namespace std;
const int N=1010;
int dp[N][N];
string a,b;
int main()
{
memset(dp,0,sizeof(dp));
cin>>a>>b;
for(int i=1;i<=a.size();i++)
{
for(int j=1;j<=b.size();j++)
{
if(a[i-1]==b[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
cout<<dp[a.size()][b.size()];
}
为啥把 getline 换成 cin 就 AC 了?
回复
共 6 条回复,欢迎继续交流。
正在加载回复...