D2. Kirk and a Binary String (hard version)
发布日期:2021-06-29 12:54:35
浏览次数:2
分类:技术文章
本文共 1379 字,大约阅读时间需要 4 分钟。
[学习博客]来自
我觉得有用的就是下面截图的这个部分。
因为你只需要考虑10递减的左右部分最长不递减的长度是不变的就可以了。那么我先从后面dp一下,求出后缀的每个位置的最长不递减序列长度(从后面好转移)
又因为上图说分成了若干个01串,前导为0,后导为1的串。。
整体考虑最长不递减长度不变那么区间最长不递减长度也就保证了不变。。
接着从s的后面开始新的dp,看当前1变为0时新的dp值(最长不递减长度)是否有变化,若没有说明当前位置可以变为0。
AC代码:
#includeusing namespace std;const int N=1e5+10;char s[N],t[N];int dp[N][2],newdp[N][2];int main(){ cin>>s+1; int n=strlen(s+1); for(int i=n;i>=1;--i) { if(s[i]=='1') { dp[i][1]=dp[i+1][1]+1; dp[i][0]=dp[i+1][0]; } else{ dp[i][0]=max(dp[i+1][1],dp[i+1][0])+1; dp[i][1]=dp[i+1][1]; } } /*for(int i=1;i<=n;++i) { printf("1:%d ",dp[i][1]); printf("0:%d\n",dp[i][0]); }*/ for(int i=n;i>=1;--i) { if(s[i]=='0') { t[i]='0'; newdp[i][0]=max(newdp[i+1][1],newdp[i+1][0])+1; newdp[i][1]=newdp[i+1][1]; } else{ int tmp=max(newdp[i+1][1],newdp[i+1][0])+1; //printf("tmp:%d dp[i][0]:%d\n",tmp,dp[i][0]); if(tmp==dp[i][1]) { t[i]='0'; newdp[i][0]=tmp; newdp[i][1]=newdp[i+1][1]; } else{ t[i]='1'; newdp[i][1]=newdp[i+1][1]+1; newdp[i][0]=newdp[i+1][0]; } } } for(int i=1;i<=n;++i) printf("%c",t[i]);}
转载地址:https://ccsudeer.blog.csdn.net/article/details/100016128 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月22日 00时29分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
「第六篇」对于电赛,我们应该看重什么?
2019-04-29
树莓派翻车了
2019-04-29
这位电子工程师,你不能错过。
2019-04-29
「重磅猜题之第二篇」2019年大学生电子设计竞赛
2019-04-29
干货分享 JVM 之第 3 篇 —— Java 内存结构相关
2019-04-29
基于 Hystrix 高并发服务限流第 2 篇 —— 服务隔离(线程池隔离、信号量隔离)
2019-04-29
SpringBoot 整合 JWT 实现统一认证
2019-04-29
TypeError: this.getOptions is not a function
2019-04-29
el-table 二维数组合并行
2019-04-29
UR5e机械臂运行一直阻塞在waitForServer
2019-04-29
ROS把pkg1下的某个头文件和源文件生成动态链接库供pkg2调用
2019-04-29
使用urdf_tutorial快速可视化urdf文件
2019-04-29
SQl 数据完整性(随堂博客)
2019-04-29
左连接、右连接、内连接
2019-04-29
MySQL DQL语句基础(随堂博客)
2019-04-29
MySQL基础练习
2019-04-29
利用MySQL进行数据复杂查询(1)
2019-04-29
利用MySQL进行数据复杂查询(2)
2019-04-29
MySQL 表与表之间的关系
2019-04-29