poj3691DNA repair

POJ3691 DNA repair AC自动机+动态规划 Problem Address:http://poj.org/problem?id=3691 【前言】 关于这道题,我看了好几天。 刚开始确实很不好理解,不知道如何动态规划法。 不过慢慢地就看懂了。 看了很多解题报告,不过写的都不是很清楚。无奈最后终于又看了代码,才渐渐了解过来。 我觉得,很多题目都不是简单地考察一个知识点,而是多个知识点的结合。而我 阅读详情
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int N=1005;
const int INF=0x3ffffff;
int tot=0,dp[N][N];
struct node{
    int son[4],fail;
    bool dan;
}trie[N];
void init(){
    for(int i=0;i<=tot;i++){
       trie[i].fail=trie[i].dan=0;
        for(int j=0;j<4;j++)
            trie[i].son[j]=0;
    }
    tot=0;
}
int get(char c){
    switch(c){
        case 'A': return 0;
        case 'T': return 1;
        case 'C': return 2;
        default: return 3;
    }
}
void Insert(char *s){
    int p = 0;
    for(int i=0,len=strlen(s);i<len;i++){
        int t=get(s[i]);
        if(!trie[p].son[t]){
            trie[p].son[t]=++tot;
        }
        p=trie[p].son[t];
    }
    trie[p].dan=true;
}
void build_ac(){
    queue<int> Q;
    for(int i=0;i<4;i++)
        if(trie[0].son[i])
            Q.push(trie[0].son[i]);
    while(!Q.empty()){
        int u=Q.front();Q.pop();
        for(int i=0;i<4;i++){
            int t=trie[u].son[i];
            int f=trie[u].fail;
            if(t){
                trie[t].fail=trie[f].son[i];
                if(trie[trie[f].son[i]].dan){
                    trie[t].dan=true;
                }
                Q.push(trie[u].son[i]);
            }else trie[u].son[i]=trie[f].son[i];
        }
    }
}
//dp[i][j],表示到达查找串第i个字符时,对应于AC自动机的j节点所需要的最小改变数。\
状态转移为dp[i][j] = min( dp[i][j], dp[i-1][j]+get(s[i-1])!=k))
int Query(char *s){
    for(int i=0,len=strlen(s);i <= len;i++)
        for(int j=0;j <= tot;j++)
        dp[i][j]=INF;
    dp[0][0]=0;//////////////
    for(int i=1,len=strlen(s);i <= len;i++){
        for(int j=0;j <= tot;j++){
            for(int k=0;k<4;k++){
                if(!trie[trie[j].son[k]].dan){
                    dp[i][trie[j].son[k]]=min(dp[i][trie[j].son[k]],dp[i-1][j]+(get(s[i-1])!=k));//////dp[i][trie[j].son[k]]
                }
            }
        }
    }
    int ret=INF;
    for(int i=0,len=strlen(s);i <= tot;i++)
        ret=min(ret,dp[len][i]);
    return ret==INF?-1:ret;
}
int n,cas;
char s[N];
int main(){
    while(scanf("%d",&n)==1&&n){
        init();
        while(n--){
            scanf(" %s",s);
            Insert(s);
        }
        build_ac();
        scanf(" %s",s);
        printf("Case %d: %d\n",++cas,Query(s));
    }
    return 0;
}

5步上手Quartz.NetUI:.NET Core定时任务的开箱即用解决方案 Quartz.NetUI是一个基于.NET Core + Quartz.NET + Vue + IView的开箱即用的定时任务UI解决方案。它结合了Quartz.NET的强大功能和Vue.js的易用性,提供了一个不依赖数据库、只需在界面进行简单配置即可使用的定时任务管理系统。通过上述步骤,你已经学会了如何使用Quartz.NetUI在.NET Core项目中实现定时任务。Quartz.NetUI不仅功能强大,而且使用简单,非常适合那些需要快速实现定时任务管理的开发者。 阅读详情

相关推荐

python指纹识别算法(亲测代码可用)

python指纹识别算法

2301_76482796的博客 3078

poj3691--DNA repair(AC自动机+dp)

DNA repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5743   Accepted: 2693 Description Biologists finally invent techniques of repairing DNA that con

随风的专栏 2362

ICM42670-P嵌入式开发实战:从寄存器配置到姿态解算全解析

本文全面解析ICM42670-P高性能6轴MEMS运动传感器的嵌入式开发实战,涵盖寄存器配置、数据采集滤波、低功耗优化及姿态解算算法。通过详细代码示例和应用案例,帮助开发者快速掌握从硬件对接到姿态跟踪系统的完整开发流程,适用于可穿戴设备和智能家居等低功耗应用场景。

gold的博客 1064

POJ3691 DNA repair 题解&代码

我心好痛啊…f**k -1改成0x3f3f3f3f就过了…这么玄妙的东西我卡了半个月我服 等老师再研究一下吧,我现在不想看到这道题 //一道题的代码几乎能背过是什么体验 注释不删,等待第二版更新#include <cmath> #include <climits> #include <cstdlib> #include <iostream> #include <queue> #include

Rainbow6174's home 1018

手把手教你用内核远程call实现64位进程注入(附完整ShellCode示例)

本文深入探讨了在Windows 64位环境下,通过内核态直接操作线程TrapFrame结构实现进程注入的高级技术。文章提供了从驱动框架设计、用户态-内核态通信,到定位修改TrapFrame、编写Shellcode及执行环境恢复的完整实战指南,并附有详细的代码示例,为安全研究人员和开发者提供了绕过用户态检测、实现底层远程代码执行的新思路。

weixin_28396629的博客 342

【花雕学编程】嵌入式破局:MimiClaw入局后,“小龙虾”AI智能体生态的竞争与未来

摘要: 2026年初,开源项目OpenClaw的爆发式增长带动AI智能体赛道迅速崛起,国内外厂商竞相布局,形成多元化的“小龙虾”生态。国外开源社区推出的嵌入式智能体MimiClaw填补了边缘设备场景空白,重塑行业竞争格局。本文系统梳理生态构成,分析云厂商(如腾讯、阿里云)、大模型厂商(如智谱、MiniMax)、硬件/OS厂商(华为)及开源独立派(有道龙虾、MimiClaw)的差异化策略,并预判未来趋势:消费级渗透加速、云边协同、IM整合及模型与Agent深度绑定。同时提醒生态存在数据泄露等高危风险,需警惕安

雕爷学编程 884

poj3691 DNA repair

AC自动机上的水题DP

ACoder 525

SAP 系统和银行系统通过 SM2 加密算法进行集成

SM2 是基于椭圆曲线离散对数问题(ECDLP)的一种公钥密码算法。椭圆曲线加密的核心原理,是利用了一个数学难题:在椭圆曲线群上,已知曲线上两点的运算结果,逆向推导出这两个点的具体信息是非常困难的。这样的复杂度使得基于椭圆曲线的密码体制比传统的 RSA 更加难以破解。在 SM2 加密中,公钥和私钥的生成与传统的椭圆曲线加密类似。选择一个椭圆曲线和一个基点 P。使用私钥 d,计算公钥 P’ = d * P。私钥 d 保密,而公钥 P’ 可公开分发,用于加密数据。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1211

【POJ3691】DNA repair (AC自动机+DP)

题意 给定N个模式字符串,和一个匹配串,要求匹配串中不出现任何一个模式串,最少修改几个字母? (字符串中只有’A’、’C’、’G’、’T’,修改操作也只能修改成这四个字母) 题解 简单的AC自动机+DP,适合作为模板题 (不知道这中算法的人)首先想到的就是最暴力的DP就是:dp[i][j]表示当前在第i位,第i位为j字符时,最少需要修改多少次,每次转移到i就必须检查i之前的若干位是否为模...

CaptainChen的博客 567

西门子PLC编程之⑦编程开始之点位配置及注释

紧接上篇,点位梳理后,进入PLC编程。1、新建工程,配置系统模块2、配置I点并做中文符合,直接上中文,smart支持中文点位编程,用起来很方便。3、配置Q点并做中文符合5、配置AIW模拟量输入点,配置AQW模拟量输出点并做中文符合6、配置手动启动辅助触点,并做中文符合7、 配置自动启动辅助触点,并做中文符合8、 配置传感器浮点型数据变量点位,并做中文符合9、配置系统运行参数设置区点位,做中午符合,做掉电保持.....................

学技术,人生不误——谁也是寂寞宇宙里的流星,只是你的坚持决定了你划过的痕迹。而且,铸造了普遍里的你的唯一。 4888

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版下载及安装教程

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版网盘下载及安装教程

智慧空间实验室 2383

poj3691(DNA Repair)

/* AC自动机,增设虚拟节点,求长度为n的字符串中包含至少k个给出的关键字的字符串的个数,结果模MOD。 增设虚拟节点的目的是为了方便状态转移。 dp转移实际上是在安全图上进行的! */ #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;map&gt; using namespace std; co...

唐武的博客 301

SolidWorks速成教程P3-5【零件 | 第五节】——异形孔向导&线性阵列&镜像

这节介绍异形孔向导、线性阵列、镜像。

嵌入式阿齐Archie 6073

[poj3691] DNA repair

题目描述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

Bill_Yang_2016的博客 523

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

POJ - 3691 DNA repair

POJ - 3691 DNA repair Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit Status Description Biologists finally invent technique

WilliamCode的博客 775

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

poj 3691 DNA repair

题目链接:http://poj.org/problem?id=3691 题目大意:已知一个DNA串和一些病毒DNA序列,求出最少改变DNA串中多少个字符,能使得串中不包含任意一个病毒序列。 题目思路:ac自动机加简单dp. #include #include #include #include #include #include #include #include #include #i

Wings_of_Liberty的专栏 986

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

POJ 3691 DNA repair

题意:给出n个病毒的DNA序列。同时

leodestiny 667

POJ 3691 DNA repair 笔记

DNA 字符串。已知N 个禁止 DNA 模式,需修改 DNA 字符串 S 。每次只能修改 S 中的一个字符,求最少修改次数。

woniupengpeng的专栏 316

银河麒麟V10安装QT5.12完整指南:从依赖到xcb踩坑解决

在国产化替代浪潮下,基于Linux内核的银河麒麟V10系统成为工控、能源等领域的重要平台。Qt作为跨平台C++图形界面框架,在麒麟系统上搭建Qt开发环境是许多上位机开发者的刚需。然而,由于系统依赖库策略保守,直接安装新版Qt常遭遇GLIBC或xcb平台插件加载失败等问题。选择长期支持版本QT5.12并结合系统架构(x86_64或aarch64),通过离线安装包部署,再配置QTDIR、PATH、LD_LIBRARY_PATH环境变量,并补齐libxcb、OpenGL等图形栈依赖,即可实现稳定运行。这一流程不仅

weixin_34234721的博客 397

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和插入母串的字符,如

BRCOCOLI的博客 350
上一篇: hdu2222Keywords Search
下一篇: hdu1698Just a Hook segment_tree
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值