大视野1195: [HNOI2006]最短母串

Bzoj1195——最短母串(AC自动机) 1195: [HNOI2006]最短母串Time Limit: 10 Sec  Memory Limit: 32 MBSubmit: 2037  Solved: 689Description给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串。Input第一行是一个正整数n(n<=12... 阅读详情

题目

Description


给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串。

Input

第一行是一个正整数n(n<=12),表示给定的字符串的个数。以下的n行,每行有一个全由大写字母组成的字符串。每个字符串的长度不超过50.

Output

只有一行,为找到的最短的字符串T。在保证最短的前提下,如果有多个字符串都满足要求,那么必须输出按字典序排列的第一个。

题意

题意非常简单,就是题目第一行。

解法

(S1,S2,„,Sn)之间是通过共用字符的方式来减少最后S的长度,那么遍历(S1,S2,„,Sn)的所有全排列就能找到那个最短的,这让人想到哈密顿路径(不是回路,起始点不同),用动态规划可以有O(n^2*2^n)的复杂度比O(n!)好一点。具体的是,建图mp[i][j]表示当第i个串在第j个串前面时他们能共用的最大字符个数。然后dp[i][j]表示当前位置在i,已经经过点集j(j是用二进制压缩了的状态量)的最大路的长度,因为题目还要求字典序最小的,所以我的dp[i][j]的结果是一个结构体,把路径和长度都保存了。

代码

#include<cstdio>
#include<cstring>
struct node
{
    int val,path[15],cnt;
}dp[15][5000];//val表示路径的长度,cnt表示路径上节点的数量,path记录了具体的节点
char str[15][55],str1[700],str2[700],ans[700];//str是原始的数据,str1和str2是用path求构成的字符串时用的,ans是最后答案
int mp[15][15],len[15];//len[i]是输入的第i个字符串的长度
int cal(int k1,int k2)//算mp[k1][k2]的值
{
    int i,j,ans=0;
    for(i=0;i<=len[k1]&&i<=len[k2];i++)
    {
        for(j=0;j<i;j++)
        {
            if(str[k1][len[k1]-j-1]!=str[k2][i-j-1])
                break;
        }
        if(i==j)
            ans=i;
    }
    return ans;
}
int check(int k1,int l1,int k2,int l2,int flag)//计算dp[k1][l1]和dp[k2][l2]所保存的路径翻译成字符串后字符串的字典序大小关系,flag是1的时候dp[k1][l1]的路径还要加上k2点,具体看调用那里
{
    int i,len1=0,len2=0;
    int tmp=dp[k1][l1].path[0];
    while(str[tmp][len1]!=0)
    {
        str1[len1]=str[tmp][len1];
        len1++;
    }
    for(i=1;i<dp[k1][l1].cnt;i++)
    {
        tmp=dp[k1][l1].path[i];
        int pos=mp[dp[k1][l1].path[i-1]][tmp];
        while(str[tmp][pos]!=0)
            str1[len1++]=str[tmp][pos++];
    }
    tmp=dp[k2][l2].path[0];
    while(str[tmp][len2]!=0)
    {
        str2[len2]=str[tmp][len2];
        len2++;
    }
    for(i=1;i<dp[k2][l2].cnt;i++)
    {
        tmp=dp[k2][l2].path[i];
        int pos=mp[dp[k2][l2].path[i-1]][tmp];
        while(str[tmp][pos]!=0)
            str2[len2++]=str[tmp][pos++];
    }
    if(flag)
    {
        int pos=mp[k2][k1];
        while(str[k1][pos]!=0)
            str2[len2++]=str[k1][pos++];
    }
    str1[len1]=0;
    str2[len2]=0;
    if(strcmp(str1,str2)<=0)
        return 0;
    else
        return 1;
}
int main()
{
    int n,i,j,k;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",str[i]);
        len[i]=strlen(str[i]);
    }
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        {
            if(i==j)
                continue;
            mp[i][j]=cal(i,j);
        }
    int lim=(1<<n);
    for(i=0;i<n;i++)
        for(j=0;j<lim;j++)
            dp[i][j].val=-1;
    for(i=0;i<n;i++)
    {
        dp[i][1<<i].val=0;
        dp[i][1<<i].cnt=1;
        dp[i][1<<i].path[0]=i;
    }
    for(j=1;j<lim;j++)
    {
        for(i=0;i<n;i++)
        {
            if(dp[i][j].val!=-1)
            {
                for(k=0;k<n;k++)
                {
                    if(((j>>k)&1))
                        continue;
                    int tmp=(j|(1<<k));
                    if(dp[k][tmp].val<dp[i][j].val+mp[i][k]||((dp[k][tmp].val==dp[i][j].val+mp[i][k])&&check(k,tmp,i,j,1)))//这里是check函数flag=1的调用,这里是在长度相同情况下判断是否要从点i转移到点k
                    {           
                        dp[k][tmp]=dp[i][j];
                        dp[k][tmp].val=dp[i][j].val+mp[i][k];
                        dp[k][tmp].path[dp[k][tmp].cnt++]=k;
                    }
                }
            }
        }
    }
    int pp=0;
    node res;
    res.val=-1;
    lim--;
    for(i=0;i<n;i++)
    {
        if(dp[i][lim].val>res.val||(dp[i][lim].val==res.val&&check(pp,lim,i,lim,0)))
        {
            res=dp[i][lim];
            pp=i;
        }
    }
    int tmp=res.path[0],lenth=0;
    while(str[tmp][lenth]!=0)
    {
        ans[lenth]=str[tmp][lenth];
        lenth++;
    }
    for(i=1;i<res.cnt;i++)
    {
        tmp=res.path[i];
        int pos=mp[res.path[i-1]][tmp];
        while(str[tmp][pos]!=0)
            ans[lenth++]=str[tmp][pos++];
    }
    ans[lenth]=0;
    puts(ans);
    return 0;
}


Qt5+OSG实战:如何用osgQOpenGLWidget在窗口中加载3D模型(附完整代码) 本文详细解析了如何在Qt5中使用osgQOpenGLWidget加载和渲染3D模型,涵盖环境配置、核心架构、性能优化及高级技巧。通过实战案例和完整代码,帮助开发者实现工业级3D模型渲染,提升Qt与OSG的整合效率。 阅读详情

相关推荐

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

[HNOI2006]最短母串问题 (ac自动鸡+状压+bfs)

Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串。 Input 第一行是一个正整数n(n<=12),表示给定的字符串的个数。 以下的n行,每行有一个全由大写字母组成的字符串。每个字符串的长度不超过50. Output 只有一行,为找到的最短的字符串T。在保...

weixin_30907935的博客 158

Windows下用Caddy一键搞定LiveKit本地HTTPS部署(含自签名证书避坑指南)

本文详细介绍了在Windows本地开发环境中,如何利用Caddy服务器一键部署支持HTTPS和WSS的LiveKit实时通信服务。文章重点解决了自签名证书的生成与配置难题,提供了完整的避坑指南和防火墙设置,帮助开发者快速搭建安全的WebRTC测试环境,实现局域网内的实时音视频互动。

weixin_29274969的博客 579

bzoj 1195: [HNOI2006]最短母串 (状压dp)

1195: [HNOI2006]最短母串 Time Limit: 10 Sec  Memory Limit: 32 MB Submit: 1212  Solved: 405 [Submit][Status][Discuss] Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串。 Inp

clover_hxy的博客 1236

TMS320F280039 CMD文件配置避坑指南:从.map文件看懂内存分配与溢出排查

本文详细解析了TMS320F280039芯片的CMD文件配置问题,通过.map文件分析内存分配与溢出排查。文章提供了实用的诊断技巧和解决方案,帮助开发者有效应对段溢出、地址重叠和栈堆冲突等常见问题,优化DSP程序的内存管理。

weixin_29168813的博客 442

Halcon与C#联合编程(一):使用S7协议实现机器视觉上位机与西门子PLC联动

本项目技术栈:C#基础,多线程,Halcon DirectShow,Halcon形状检测,Halcon QR码识别,西门子S7通讯协议,西门子PLC为核心的下位机及执行元件

虎鲸不是鱼 1万+

[BZOJ1195]:[HNOI2006]最短母串(AC自动机+BFS)

题目传送门 题目描述: 给定n个字符串(S1,S2,…,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,…,Sn)都是T的子串。 输入格式: 第一行是一个正整数n,表示给定的字符串的个数。 以下的n行,每行有一个全由大写字母组成的字符串。每个字符串的长度不超过50。 输出格式: 只有一行,为找到的最短的字符串T。在保证最短的前提下, 如果有多个...

weixin_33804582的博客 254

【Unity 实用工具篇】| Unity中 实现背景模糊效果,简单易用

背景模糊 是一个很实用的功能,它可以帮助游戏在视觉上有更好的专注力和表现力。 实现模糊的种类和方式有很多种,大家自行选择适合自己的就可以了。 下面一起来看下本文实现背景模糊的效果和使用方式吧!

努力前行,总会成为自己心中的那道光 4万+

【loj10061】最短母串

#10061. 「一本通 2.4 练习 4」最短母串 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者:1bentong 提交 提交记录 统计 讨论 测试数据 题目描述 原题来自:HNOI 2006 给定 n个字符串 S1,S2,⋯...

baikeshe8603的博客 309

独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

独创改进🚀! | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构

Coding... 2211

基于分水岭分割进行肺癌诊断

近年来,肺癌的发病率和病死率均迅速上升,目前已居所有癌症之首。随着肺癌病人数量的增加,医生对肺部 CT 图像进行研判的工作量也增加了不少,在这种情况下难免工作效率降低甚至会出现误诊。为了帮助医生减少重复性工作,对肺部 CT 图像进行计算机辅助检测的技术就被广泛应用于对肺癌的诊断和治疗过程中。医学 CT 图像处理主要是研究医学图像中的器官和组织之间的关系,并进行病理性分析。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1568

最短母串

Ac_automaton的与状压的结合。 看题解说是Ac_automaton上的dp,但是实际上没有十分明显的转移过程,仅仅使用状压的方式记录某个串是否被选择过了(当然有建完Ac_automation然后跑纯状压dp的解法)。 首先建立Ac_automaton(Trie图),额外维护一个sta数组,该数组为一个二进制表示数组,‘1’表示该串出现过,‘0’表示该串为出现过。这个信息需要...

bansi8227的博客 331

从数字后端角度谈谈occ电路(一)

摘要:本文介绍了芯片测试中OCC(On-Chip Clock Control)电路的设计与应用。随着工艺进步,芯片制造面临Stuck-at、Bridging和Delay等故障类型,需要不同时钟频率进行测试。OCC电路通过Clock Selection、Clock Chopping Control和Clock Gating三个模块,实现ATE时钟与PLL时钟的切换控制,支持慢速时钟检测Stuck-at故障和快速时钟检测Delay故障。文章详细解析了OCC电路结构及各模块功能,包括同步单元、移位寄存器等关键组件

芯冰乐 585

最短母串问题(AC自动机+BFS+状态压缩)

最短母串问题 题意:给定nnn个子串,求最短且字典序最小的母串(母串性质:这nnn个子串都包含在母串里) 思路: 考虑把子串去重(不去重能不能A我不知道,但去重肯定没问题) 建好AC自动机 从000节点开始用bfsbfsbfs遍历自动机,并且总是从’A’遍历到’Z’以保证答案的字典序最下 每次取出头结点时检查其状态是否包含了所有的子串,状态检查:now.state==(1&lt;&amp...

UniverseofHK的博客 550

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

2017.10.5 最短母串 思考记录

这个题n 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间。 所以只能记录前继动态判断、、 所以十分难写难调 码: #include #include #include using namespace std; int n,i,j,k,l,lin[15],g1[16385][15],g2[16385][15],er[15],da

-----PSI----- 510

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

洛谷P2322 [HNOI2006]最短母串问题

BFS、状压DP、AC自动机

ACoder 724

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[BZOJ1195]最短母串

题目描述 原题来自:HNOI 2006 给定 n 个字符串 S1,S2,⋯,Sn 要求找到一个最短的字符串 T,使得这 n 个字符串都是 T 的子串。1​​,S​2​​,⋯,S​n​​,要求找到一个最短的字符串 TTT,使得这 nnn 个字符串都是 TTT 的子串。 输入格式 第一行是一个正整数 n,表示给定的字符串的个数; 以下的 n 行...

weixin_30918633的博客 284

HNOI2006 最短母串问题

传送门 在ACACAC自动机上bfsbfsbfs即可。用vis[id][state]vis[id][state]vis[id][state]表示当前处于ACACAC自动机上ididid号节点,已包含串的状态为statestatestate。由于是bfsbfsbfs,所以可以保证第一次搜到的即为最短的。搜到包含所有串的状态输出即可。 要把一个节点的failfailfail的贡献加到该节点身上。 #i...

g21wcr的博客 254

【AC自动机】最短母串

【题目链接】 https://loj.ac/problem/10061 【题意】 给定 n个字符串 S1~Sn,要求找到一个最短的字符串 T,使得这 n个字符串都是 T的子串。 【题解】 类似于搜索+二进制记录状态的题目 搜索时利用BFS来跑,每一个结点的位置都可以用状态数组存起来, 判断是否为 (1<<n)- 1 即可。 在输出答案时需要递...

weixin_30835923的博客 202

bzoj 1195: [HNOI2006]最短母串 状压dp

令f[i][j]表示所选的字符串的集合用二进制表示为i,最后一个字符串为j时的最短母串。那么通过预处理一个数组c[i][j]表示将j接在i后面需要拓展多少位就可以实现O(N)转移。那么状态数为O(N2^N),时间复杂度就是O(N^2·2^N)。        注意到这道题目需要按字符串字典序输出,因此还需要用s[i][j]表示最短的母串中字典序最小的(必须记录整个母串否则会错,因此部分网上题解有

lych的博客 2497

bzoj1195: [HNOI2006]最短母串

一开始以为这是字符串好题,一看n范围,n!就炸了。 考虑dp,dp[i][j] i表示每个子串有没有出现,j表示最后的串。 看了lych的博客之后,自己还是naive!首先有可能出现一个串没有用,要预处理掉,另外字典序最小需要存更多的东西。复杂度O(2^n*n*n*跑得过)。 #include #include #include #define N 13 using namespace s

miaom的博客 814

P2322 [HNOI2006]最短母串问题(AC自动机)

P2322 [HNOI2006]最短母串问题(AC自动机) AC自动机。 用一个变量st,维护每个结点包含的串(状压),注意getFail时也要传递st变量。 然后bfs ,回溯输出答案即可。 时间复杂度:O(cnt×2n)O(cnt\times 2^n)O(cnt×2n) // Problem: P2322 [HNOI2006]最短母串问题 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P2322 // Memory Limit: 3

Harris-H的博客 568

【HNOI2006】bzoj1195 最短母串

状压dp

YHaX的博客 524

习题:最短母串(状压)

题目: A. 最短母串 内存限制:512 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 给定n 个字符串,要求找到一个最短的字符串,使得这 n个字符串都是它 的子串。 输入格式 第一行是一个正整数,表示给定的字符串的个数; 以下的 n+1 行,每行有一个全由大写字母组成的字符串。 输出格式 只有一行,为找到的最短的字符串...

weixin_43726650的博客 239

[HNOI2006]最短母串问题——AC自动机+状压+bfs环形处理

Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串。 32MB Input 第一行是一个正整数n(n<=12),表示给定的字符串的个数。 以下的n行,每行有一个全由大写字母组成的字符串。每个字符串的长度不超过50. Output 只有一行,为找到的最短的字符串T。在...

weixin_34088598的博客 184

[BZOJ1195] 最短母串

E. 最短母串 题目描述 原题来自:HNOI 2006 给定 n 个字符串 S1,S2,⋯,Sn​1​​,S​2​​,⋯,S​n​​,要求找到一个最短的字符串 TTT,使得这 nnn 个字符串都是 TTT 的子串。 输入格式 第一行是一个正整数 n,表示给定的字符串的个数; 以下的 n 行,每行有一个全由大写字母组成的字符...

weixin_30556161的博客 234
上一篇: 某搜索公司的杀毒卫士引起的电脑故障
下一篇: 用来实现OJ判题的windows批处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值