const double esp = 1e-6;
int dp[1009][1009];
int cnt;
struct trie
{
trie *ch[4];
trie *fail;
int id;
bool end;
void init()
{
memset(ch, NULL, sizeof(ch));
fail = NULL;
id = cnt;
end = false;
}
}t[1009], *root;
int map(char ch)
{
if(ch=='A') return 0;
else if(ch=='C') return 1;
else if(ch=='G') return 2;
else return 3;
}
void insert(char *s)
{
trie *p = &t[0];
for(int i=0; s[i]; i++)
{
int k = map(s[i]);
if(p->ch[k]==NULL)
{
t[cnt].init();
p->ch[k] = &t[cnt++];
}
p = p->ch[k];
}
p->end = true;
}
queue<trie*>q;
void build_fail()
{
q.push(root);
root->fail = root;
while(!q.empty())
{
trie *p = q.front(); q.pop();
for(int k=0; k<4; k++)
if(p->ch[k]!=NULL)
{
q.push(p->ch[k]);
if(p==root)
{
p->ch[k]->fail = root;
if( p->ch[k]->fail->end == true )
p->ch[k]->end = true;
continue;
}
trie *tmp = p->fail;
while( tmp!=root && tmp->ch[k]==NULL)
tmp = tmp->fail;
if(tmp->ch[k]) p->ch[k]->fail = tmp->ch[k];
else p->ch[k]->fail = root;
if( p->ch[k]->fail->end == true )
p->ch[k]->end = true;
}
else
{
p->ch[k] = p->fail->ch[k];
}
}
}
inline void updata(int &a, int b)
{if(a < 0 || b < a) a = b;}
int main()
{
int n, ca = 0;
char str[1009];
while(scanf("%d", &n), n)
{
cnt = 0;
t[cnt++].init();
root = &t[0];
while(n--)
{
scanf("%s", str);
insert(str);
}
build_fail();
scanf("%s", str);
int len = strlen(str);
memset(dp, -1, sizeof(dp));
dp[0][0] = 0;
for(int i=0; i<len; i++)
for(int j=0; j<cnt; j++)
if(dp[i][j]>=0 && t[j].end==false)
{
for(int k=0; k<4; k++)
{
int tmp = 1-(k==map(str[i]));
if(t[j].ch[k]==NULL)
updata(dp[i+1][0], dp[i][j]+tmp);
else if(t[j].ch[k]->end==false)
updata(dp[i+1][ t[j].ch[k]->id ], dp[i][j]+tmp);
}
}
int ans = -1;
for(int i = 0; i < cnt; i ++)
if(dp[len][i] >= 0) updata(ans, dp[len][i]);
printf("Case %d: %d\n",++ca, ans);
}
return 0;
}
相关推荐
内存学习(3):DRAM的基础存储结构(存储层级、读写过程,刷新与暂存)
DRAM,全称为 Dynamic Random Access Memory ,中文名是“动态随机存取存储器”。所谓“动态”是和“静态”相对应的,芯片世界里还有一种 SRAM 静态随机存取存储器的存在。笼统地说,DRAM 的结构比 SRAM 更简单,面积占用更小,适合制作大容量的存储芯片;而 SRAM 结构复杂一些,一般使用六个晶体管,面积消耗大,但是读写速度快,而且因为 SRAM 只用到晶体管,所以在工艺上和逻辑芯片相兼容,我们可以在逻辑芯片上直接集成 SRAM。
AC自动机+DP(POJ2778&&POJ3691)
AC自动机+DP傻X题
人类肠道微生物群落代谢建模
MICOMWeb 是款用户友好型网站,专为人类肠道微生物群落代谢建模设计。该网站旨在解决基因组尺度代谢模型(in silico)构建过程中的3大限制:① 使用 MICOM Python 包进行通量平衡分析时对用户 Python 编程知识的要求;② 支持预定义和用户自定义饮食,以生成专属代谢模型;③ 处理宏基因组鸟枪法测序或 16S 扩增子测序获得的真实丰度数据时,所需的高通量计算基础设施。本文展示了 MICOMWeb 的核心功能,用户可轻松开展虚拟实验,为3个已发表数据集的实验验证生成功能性假设。
POJ 3691 DNA repair AC自动机 + dp
传送门:POJ3691 题意:给定一个原字符串S和n个禁止模式串p1,p2...pn,请修改字符串S,使得其中不包含任何禁止模式串,只能将S中的字符修改为其他字符而不能增加或删除,如果怎么修改都不行,输出-1,否则输出最少修改次数。 思路:挑战程序设计P370例题,但是白书上不是用ac自动机做的,而是暴力预处理,我看网上dalao都是ac自动机或者说Trie图预处理,就学着写了一发,这也是第一
银河麒麟桌面操作系统V10(SP1)ssh服务安装与配置
在国产化的大背景下,各种国产操作系统逐步进入运维人员的视野,ssh作为linux远程连接工具,是运维人员必需的工具之一。本文主要介绍在银河麒麟桌面操作系统V10(SP1)上安装和配置ssh服务。
企业级OpenClaw部署实战:10个关键配置让你从“养虾“到“精通“
OpenClaw(社区昵称"小龙虾")作为2026年开源社区最活跃的AI Agent项目,凭借其多Agent协同架构和企业级安全隔离能力,已成为中大型企业的首选AI基础设施。本文基于真实企业部署经验,系统梳理了企业级OpenClaw部署的10个关键配置:用户ID消息隔离、群组ID消息隔离、多机器人配置、无限量Agent创建、机器人与Agent关联、Agent间调度、权限配置、Hooks任务、多模型切换及一键备份迁移。
【poj3691-DNA repair】AC自动机+DP
【poj3691-DNA repair】AC自动机+DP 题意:给n个病毒DNA序列,再给一个DNA序列,问该序列至少修改多少个碱基能不含任何病毒DNA。病毒DNA序列一共不超过1000,询问的DNA长度不超过1000。 题解:DP:d[l][p]表示询问到第l位、当前在AC自动机上的位置为p时的最少修改数,用d[l][p]推d[l+1][x]。...
14、X射线图像处理与特征提取全解析
本文全面解析了X射线图像处理与特征提取的关键技术,涵盖图像预处理、滤波、边缘检测、分割与恢复等流程,并深入探讨了几何特征(如面积、周长、圆度、椭圆拟合)、强度特征(均值、方差、对比度)、傅里叶描述符、不变矩(Hu矩、Gupta矩)以及局部描述符(SIFT、SURF)和稀疏表示方法。同时介绍了特征选择的过滤法、包装法和嵌入法,并结合Matlab代码示例展示了各类特征的实际提取过程。文章最后总结了当前技术的应用现状,并展望了深度学习在X射线图像分析中的未来潜力。
poj 3691 DNA repair AC自动机+DP
Description Biologists finally invent techniques of repairing DNA that contains segments causing kinds of inherited diseases. For the sake of simplicity, a DNA is represented as a string cont
【AI智能体】Codex 浏览器操作自动化任务实战操作详解
【AI智能体】Codex 浏览器操作自动化任务实战操作详解
ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?
在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。
poj3691 DNA repair[DP+AC自动机]
$给定 n 个模式串,和一个长度为 m 的原串 s,求至少修改原串中的几个字符可以使得原串中不包含任一个模式串。模式串总长度 ≤ 1000,m ≤ 1000。$ 先建出模式串的AC自动机,然后考虑怎么求最优解。考虑AC自动机上DP,设$f_{i,j}$走了$i$步之后在$j$节点时候的最少修改次数。 标记处所有不能走到的点(即走到就匹配了的点,即后缀为某一模式串的所有点),走点的...
基于Simulink的超级电容器充放电仿真
为了更好地理解和设计超级电容器的应用系统,通常需要进行详细的仿真分析。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证超级电容器充放电系统的控制策略。本教程将详细介绍如何使用 Simulink 进行超级电容器充放电的仿真实例。如果你希望对超级电容器的充放电过程进行精确控制,可以添加一个简单的逻辑控制器来控制开关的状态。通过本教程,我们详细介绍了如何使用 Simulink 进行超级电容器充放电的仿真实例。2. 添加超级电容器模型。7. 添加控制器(可选)1. 调整超级电容器参数。
POJ 3691 DNA repair AC自动机+DP -
题目地址:http://poj.org/problem?id=3691 思路: 把所有节点建一棵trie树 那么我们要做的 就是把母串在树上搜索,而且在搜索的时候不会碰到危险节点 也即是对于节点j有条字母边a到son[j] , 1)如果son[j]是危险节点,那么换一条j的边 2)如果son[j]为空,就顺着前驱节点找另一个字母边a 3)如果以上都不是,那么比较a和插入母串的字符,如
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
POJ 3691:DNA repair(AC自动机+DP)
DNA repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3353 Accepted: 1487 Description
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
poj 3691 DNA repair(AC自动机+DP)
DNA repair Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description Biologists finally invent techniques of repairing DNA that contains segments causing ki
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
POJ - 3691 DNA repair (AC自动机+DP)
题意:(换了一种描述,其实是一样的题) 分析: 首先对与这种题的题问,可以很明显地感觉到DP 因为很多模式串,所以考虑多模式匹配的AC自动机算法。 首先考虑建立fail树,跟正常的ac自动机的fail树其实是一样的,只不过多了一个东西,就是对于这种情况: 以下面这两个字符串建立fail树为例: CD ABCDAB 那么很显然第二个字符串中间的CD也是非法状态。所以对于建...
AC自动机DP poj 3691
在1+学长的指点下,成功理解并完成了自己的第一个AC自动机 首先要做的就是鄙视一下我自己,如果您是在网上搜代码发现了本博也可以尽情的鄙视博主…… 我写的时候就告诉自己一定要写的简短一些,很不幸,这个绝对是你你能搜到的最长~~~~的AC自动机DP 在1+学长的帮助一下,完成了这个DP。 注意一些概念:trie图上的每个节点代表自动机上的状态,而边代表的是字符,自动机的状态有明显的无后效性。节...
hdu2457 & poj3691 DNA repair AC自动机+DP
乱搞了一下竟然1A了...太感动了....先给n个病毒DNA序列,再给一个长串。问最少修改长串几个字符,可以让它不包含任何一个病毒序列。拿病毒的序列构造AC自动机,之后再自动机上搞DP,用dp[l][i]表示当前长度为l,自动机上的状态为i时,最少的字符修改数.循环A,T,G,C四种方案,在添加该字符之后的状态为安全的前提下,如果当前方案和母串的第l为刚好相同,那么直接用dp[l][i]去更新dp
POJ 3691 DNA repair AC自动机DP
题目大意:给出一些病毒串,和一个串,问至少修改多少个使得原串中不含病毒串。 思路:AC自动机+DP,比较裸的题。先按照病毒串建立AC自动机(Trie图当然也可以),然后设出状态:f[i][j]表示匹配到原串第i个字符时,在AC自动机的j号节点时没有病毒串的最小花费。转移的时候有三种情况:1.转移出病毒串,这个时候直接continue。2.转移与原串相符,这个时候直接将数值转移过去。3.转
POJ 3691 DNA repair (AC自动机+dp)
题目类型 AC自动机+dp 题目意思 给出最多 50 个最长 20 的不好的字符串 问给出一个最长 1000 的字符串至少要修改多少个字符才可以使这个字符串不包含不好的字符串 字符串只含有(A,G,C,T)这四种字符 解题方法 用输入的 不好的字符串 构造ac自动机 (结点数不会超过 1000) 然后进行普通的匹配过程, 简单地理解为在ac自动机上进行
POJ - 3691 DNA repair【AC自动机+DP】
Time limit 2000 ms Memory limit 65536 kB Biologists finally invent techniques of repairing DNA that contains segments causing kinds of inherited diseases. For the sake of simplicity, a DNA is represen...
DNA repair POJ - 3691(AC自动机 + DP)
Biologists finally invent techniques of repairing DNA that contains segments causing kinds of inherited diseases. For the sake of simplicity, a DNA is represented as a string containing characters 'A...
【ac自动机·DP】poj3691 DNA Repair
这道题做得相当怀疑人生 先按照poj2778建树建图; http://blog.youkuaiyun.com/nymph_h/article/details/77141849 接下来不用矩阵快速幂用DP 我对DP从来有莫名的恐惧dp[文本串长度][Trie树节点数]; 母串的前I个前缀在TRIE树中遍历,达到某个安全节点j需要修改的最小值dp[I][j];#define _CRT_SECURE_NO_
POJ 3691 DNA repair(AC自动机+DP)
故君子必慎其独也
POJ3691 - AC自动机的第一道DP
第一道AC自动机...从上周日就开始写了..搞得我都要抓狂了...今天也是看了在网上搜了些解题报告才搞定...发现和我自己整得差别较大...瞎忙活了3天... .题意是说给了N个带病毒的DNA串( DNA串只有AGCT几种单元组成)...再给一长串DNA..问这长串DNA最少改动几个(就是改..不是删除或者添加..)能保证没有包含病毒字串..输出这个最小改动的次数..若怎么修改都带病毒子串
2万+



被折叠的 条评论
为什么被折叠?



