题目链接

参考博客

这题题意是给你一个只由ATCG组成字符串,让你用ATCG去构造它,两种操作,1.把当前构造的字符向左或右复制,2向当前构造的字符串向左或右添加一个字符

思路:在回文自动机上dp

这题清空得优化一下,不然会tle

#include<cstdio>
#include<cstring>
#define ll long long
#include<algorithm>
#define maxn 205000
#include<math.h>
#include<map>
#include<unordered_map>
#define ll long long
using namespace std;
int tre[maxn][5],len[maxn],cnt,fail[maxn],last,half[maxn],dp[maxn];
char s[maxn];
void init()
{//memset(fail,0,sizeof(fail));//memset(tre,0,sizeof(tre));//memset(len,0,sizeof(len));//memset(dp,0,sizeof(dp));for(int i=0;i<=cnt+5;i++){memset(tre[i],0,sizeof(tre[i]));len[i]=0;}s[0]='#';len[0]=0;len[1]=-1;cnt=1;fail[0]=1;last=0;half[0]=half[1]=0;
}
int get_fail(int x,int n)
{while(s[n-len[x]-1]!=s[n])x=fail[x];return x;
}
int main()
{int k=0;int t;scanf("%d",&t);while(t--){init();scanf("%s",s+1);int ans=1e9,tot=strlen(s+1);for(int i=1; s[i]!='\0'; i++){int x;if(s[i]=='A')s[i]='a';else if(s[i]=='T')s[i]='b';else if(s[i]=='C')s[i]='c';elses[i]='d';x=s[i]-'a';int y;last=get_fail(last,i);if(!tre[last][x]){len[++cnt]=len[last]+2;int q=fail[last];q=get_fail(q,i);fail[cnt]=tre[q][x];tre[last][x]=cnt;//ans[cnt]=ans[fail[cnt]]+1;if (len[cnt]==1)half[cnt]=0;else{int pos=half[last];while ( s[i - len[pos] - 1] != s[i]||len[pos]+2>len[cnt]/2 )pos = fail[pos] ;half[cnt]=tre[pos][x];}if (len[cnt]&1)dp[cnt]=dp[fail[cnt]]+len[cnt]-len[fail[cnt]];else if (len[cnt]<=2)dp[cnt]=len[cnt];elsedp[cnt]=min(dp[last]+1,dp[half[cnt]]+len[cnt]/2-len[half[cnt]]+1);}last=tre[last][x];ans=min(ans,dp[last]+tot-len[last]);}printf("%d\n",ans);}
}

Gym - 100543G Virus synthesis Gym相关推荐

  1. 【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题

    先上Roms.tar.gz安装地址:Roms.tar.gz 以下内容是解决问题的思路,如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: ...

  2. BZOJ4044 Luogu P4762 [CERC2014]Virus Synthesis (回文自动机、DP)

    好难啊..根本不会做..基本上是抄Claris... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4044 (luogu) ...

  3. BZOJ 4044 Luogu P4762 [CERC2014]Virus Synthesis (回文自动机、DP)

    好难啊..根本不会做..基本上是抄Claris... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4044 (luogu) ...

  4. 洛谷P4762: [CERC2014]Virus synthesis(PAM)

    解析 自己对PAM的理解不够深刻. 最优方案必然是先选择一个偶回文串,递归构造出它的一半.花一步逆序,然后暴力解决剩下的. 这似乎已经依稀出现了某种dp的思路. 考虑如何更好的转移.设计 transx ...

  5. P4762-[CERC2014]Virus synthesis【PAM,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4762 题目大意 长度为nnn的目标串,开始一个空串,可以执行以下操作 在头或者尾加一个字符 复制一个该串的逆串放 ...

  6. bzoj 4044 Virus synthesis - 回文自动机 - 动态规划

    题目传送门 需要高级权限的传送门 题目大意 要求用两种操作拼出一个长度为$n$的只包含'A','T','G','C'的字符串 在当前字符串头或字符串结尾添加一个字符 将当前字符串复制,将复制的串翻转, ...

  7. bzoj4044 [Cerc2014] Virus synthesis

    回文自动机上dp f[x]表示形成x代表的回文串所需的最小步数, 若len[x]为奇数,f[x]=len[x],因为即使有更优的,也是直接添加,没有复制操作,那样就不用从x转移了. 若len[x]为偶 ...

  8. bzoj 4044: [Cerc2014] Virus synthesis 回文树

    题意 你要用ATGC四个字母用两种操作拼出给定的串: 1.将其中一个字符放在已有串开头或者结尾 2.将已有串复制,然后reverse,再接在已有串的头部或者尾部 一开始已有串为空.求最少操作次数. l ...

  9. 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例

    强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...

最新文章

  1. vue中axios如何实现token验证
  2. SHELL-命令解释程序
  3. c++之趣味new代码大家看
  4. 《VMware、Citrix和Microsoft虚拟化技术详解与应用实践》一2.4 ESXi 5.0的简单设置...
  5. 2020 年软件开发趋势预测,Java 将占主导,Python 将要吞噬世界
  6. 直播预告 | AAAI 2022论文解读:融入知识图谱的分子对比学习
  7. JSON模式在构建和部署API中的作用
  8. 月工资扣除五险一金到手3000左右
  9. 伪静态设置php,php伪静态设置
  10. python函数设置默认参数_深入讲解Python函数中参数的使用及默认参数的陷阱
  11. 【雷达与对抗】【2014.06】荷兰人工育滩工程Sand Motor的X波段雷达深度反演模型研制
  12. 百度文库免财富值下载文件
  13. linux安装杰奇远程采集,杰奇linux远程采集,采集器网站分离
  14. Vagrant安装CentOS7镜像
  15. 简历在线制作计算机,简历在线生成,在线生成PDF或word格式简历
  16. 隆重推荐:吴闲云 - 三国中的博弈
  17. jenkins pipeline php,Jenkins + Pipeline 构建自动化发布
  18. 一个python文件调用另一个python文件
  19. 巧妙使用多个旧路由器无线中继提升网络速度
  20. 关于服务器被入侵+植入病毒木马

热门文章

  1. 程序的两种执行方式,静态语言和脚本语言
  2. Python之urlparse模块
  3. 简单对数不等式的证明
  4. Python图片读显写的几种方式
  5. 录屏工具下载哪个好?分享:超简单的录屏工具及实用方法
  6. java se  计算机专业技能-Java专项练习(选择题)(三)
  7. 京东入职一周感悟:4个匹配和4个观点
  8. 2020李宏毅机器学习笔记-More about Auto-encoder
  9. 排序算法学习整理一(冒泡)
  10. rocketMQ 删除过期文件(磁盘空间不足导致mq消息发送不了)