洛谷P1852 奇怪的字符串
2024-10-01 19:50:55
题目描述
输入两个01串,输出它们的最长公共子序列的长度
输入输出格式
输入格式:
一行,两个01串
输出格式:
最长公共子序列的长度
输入输出样例
说明
01串长度≤10000
数据好水啊
一开始想了一个dp[i]表示以b中到达i位置最长的LCS,f[i]表示他的位置,然后转移就好,不过这样只能处理LCS是从1开始的情况
比如
01110
101100这个数据就过不去了,
然而。。
我得了90.。。。。。。。
后来加了个特判就A了,
时间复杂度严格O(la+lb)
速度保证全洛谷rank1:joy:
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
inline char nc()
{
static char buf[MAXN],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,MAXN,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
char c=nc();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=nc();}
while(c>=''&&c<=''){x=x*+c-'';c=nc();}
return x*f;
}
inline int work(int x)
{
int ans=;
for(int i=;i<x;i++)
if(x%i==) ans+=i;
return ans;
}
int dp[MAXN];//i位置的长度
int f[MAXN];//i位置所对应的位置
char a[MAXN],b[MAXN];
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#else
#endif
scanf("%s",a+);
scanf("%s",b+);
int la=strlen(a+),lb=strlen(b+);
for(int i=;i<=lb;i++)
{
dp[i]=dp[i-];
f[i]=f[i-];
for(int j=f[i-]+;j<=la;j++)
{
if(b[i]==a[j])
{
dp[i]=dp[i]+;
f[i]=j;
break;
}
}
}
if(dp[lb]==&&lb>=) printf("");
else printf("%d",dp[lb]);
return ;
}
xjb贪心
正解是裸地LCS
不过按理说O(n^2)的应该过不去
数据太水了没办法
注意滚动数组
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=;
inline char nc()
{
static char buf[MAXN],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,MAXN,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{
char c=nc();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=nc();}
while(c>=''&&c<=''){x=x*+c-'';c=nc();}
return x*f;
}
inline int work(int x)
{
int ans=;
for(int i=;i<x;i++)
if(x%i==) ans+=i;
return ans;
}
int dp[][MAXN];//i位置的长度
char a[MAXN],b[MAXN];
int main()
{
#ifdef WIN32
freopen("a.in","r",stdin);
#else
#endif
scanf("%s",a+);
scanf("%s",b+);
int la=strlen(a+),lb=strlen(b+);
for(int i=;i<=la;i++)
for(int j=;j<=lb;j++)
if(a[i]==b[j])
dp[i^][j]=dp[(i-)^][j-]+;
else dp[i^][j]=max(dp[(i-)^][j],dp[i^][j-]);
printf("%d",dp[la^][lb]);
return ;
}
最新文章
- SharePoint 2013 文档上传的多种形式
- 4. 什么是AJAX
- Android中运行的错误:java.lang.UnsatisfiedLinkError: Couldn&#39;t load locSDK3: findLibrary returned null.
- node exports与 module.exports的区别
- MongoDB的增删改查 转
- Python应用与实践【转】
- HW6.25
- springmvc的讲解
- GridView控件中插入自定义删除按钮并弹出确认框
- ASP.NET上传大文件出现网页无法显示的问题
- itextsharp c# asp.net 生成 pdf 文件
- 8.23.3 IO-转换流的作用
- PL/SQL 记录 Record 简介
- 【重点--web前端面试题总结】
- 使用交互式方式在SQL server2017上创建数据库
- css 块元素、内联元素、内联块元素
- apm固定翼调试方法
- Could not initialize class utils.JdbcUtils
- Centos7关闭防火墙
- package-lock.json和package.json区别
热门文章
- 洛谷—— P2934 [USACO09JAN]安全出行Safe Travel || COGS ——279|| BZOJ——1576
- iOS App 上架流程
- Trie树的常见应用大总结(面试+附代码实现)
- Hadoop2.2集群安装配置-Spark集群安装部署
- POJ 1895 分层图网络流+输出路径
- Gym - 100203H Highways 最小生成树
- rowcount和@@rowcount的区别
- JS 引擎基础之 Shapes and Inline Caches
- Comput_picture
- Maven学习总结(19)——深入理解Maven相关配置