题目大意:

给出一个字符串A,要求最短的字符串B,B不是A的子序列。 求最短长度 和 最短的字符串个数    |A|<=105.

题解:

1.比赛的时候没有想出来,时隔一个多月又看到了这道题,虽然已经退役,还是下决心把它弄懂。

2.网络上基本都是直接贴代码的.我还是简要的写一写解法:

可以想象我们在字符串A上移动。一开始在一个起始节点(0号节点)上,如果我们选了字符p,现在在k号节点上,那么我们可以直接跳到p下一次出现的位置r(如果没有,跳到n+1号点)。

因为k,r直接没有字符p,就无需考虑它们之间的点.

所以F[i]表示移动到点i的最小步数,G[i]表示相应的方案数。 预处理出nxt[i][j]表示A[i+1 ... n]最左边出现字符j的位置。也就是节点之间的边。

从i可以通过选取字符j直接走到nxt[i][j]. 转移见代码。

 1         for (int i=1;i<=n+1;i++) f[i]=Inf,g[i]=0;
2 for (int i=0;i<=n;i++)
3 {
4 if (f[i]==Inf) continue;
5 for (int j=0;j<26;j++)
6 {
7 if (f[i]+1<f[nxt[i][j]]) f[nxt[i][j]]=f[i]+1,g[nxt[i][j]]=0;
8 if (f[nxt[i][j]]==f[i]+1) g[nxt[i][j]]=Add(g[nxt[i][j]],g[i]);
9 }
10 }

最强密码 (百度之星复赛 T5)的更多相关文章

  1. 百度之星复赛T5&&hdu6148

    Problem Description 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Number,像山谷一样的数字. 当一个数字,从左到右依次看过去数字没有出现先递增接着递 ...

  2. 【百度之星复赛】T5 Valley Numer

    Valley Numer Problem Description 众所周知,度度熊非常喜欢数字. 它最近发明了一种新的数字:Valley Number,像山谷一样的数字. 当一个数字,从左到右依次看过 ...

  3. hdu5713 K个联通块[2016百度之星复赛B题]

    dp 代码 #include<cstdio> ; ; int n,m,k,cnt[N]; ]; ][],i,j,l,a,b; int check(int x,int y) { int i; ...

  4. hdu5714 拍照[2016百度之星复赛C题]

    由于船移动的速度都一样,那么对于往一个方向的船相对距离其实是不变的,我们可以把往一个方向移动的船都视作静止,并求出在哪些观测位置可以看到,很明显对于船[x,y,z],当x+z>=y-z的时候,可 ...

  5. hdu5715 XOR 游戏 [2016百度之星复赛D题]

     比赛的时候没仔细想,赛后一想这题其实挺简单的,先求出序列的异或前缀和,然后将异或前缀和建出一颗trie树,然后我们可以二分答案,把问题变成判定性问题,判定是否存在一种方案,使得所有的分组的异或和都大 ...

  6. 百度之星复赛 1004 / hdu5715 二分dp+trie

    XOR 游戏 Problem Description   众所周知,度度熊喜欢XOR运算[(XOR百科)](http://baike.baidu.com/view/674171.htm). 今天,它发 ...

  7. 百度之星复赛Astar Round3

    拍照 树状数组(SB了).求出静止状态下,每个点能看到多少个向右开的船c1[i],多少个向左开的船c2[i]. max{c1[i] + c2[j], (满足i <= j)  }即为答案.从后往前 ...

  8. 2016"百度之星" - 复赛(Astar Round3) 1003 拍照

    拍照 思路:先静态,离线树状数组,分别统计每个点向左向右能看到的船的数量.再枚举整个区间求最大值. 应为人和船都是动态的,假设船往左走,处理每个点看到向左最大船的数量,满足动态条件.就是向左的船一开始 ...

  9. 百度之星复赛T6&&hd6149 ——Valley Numer II

    Problem Description 众所周知,度度熊非常喜欢图. 它最近发现了图中也是可以出现 valley —— 山谷的,像下面这张图. 为了形成山谷,首先要将一个图的顶点标记为高点或者低点.标 ...

随机推荐

  1. [issue] [iOS 10] 升级后无法真机测试 Could not find Developer Disk Image

    说明:更新了手机的到了iOS 10.0.2.真机调试时候提示"Could not find Developer Disk Image" 并且之前就下载了Xcode8,但是没有安装X ...

  2. 24.Redis2.8主从集群sentinel

    0.集群架构(此处只说两种;本文2种,避免sentinel成为单节点) 第一种: 第二种: 1.下载redis2.8.x版本,2.8.x都是稳定版 redis-2.8.24.tar.gz 2.解压,安 ...

  3. 关于mysql中实现replace的sql语句

    update  表名  set  字段名=replace(字段名, '旧字符串', '新字符串')

  4. GCD 开发

    一.简介 GCD 的全称是 Grand Centre Dispatch 是一个强大的任务编程管理工具.通过GCD你可以同步或者异步地执行block.function. 二.dispatch Queue ...

  5. Linux 系统时间和硬件时间

    linux 的系统时间有时跟硬件时间是不同步的 Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel ...

  6. typeof,GetType

    typeof: 是运算符,获得某一类型的 System.Type 对象. Int32 t = new Int32(); Type t = typeof(int); GetType: 是方法,获取当前实 ...

  7. JQuery_DOM 节点操作之复制、替换和 删除节点

    一.复制节点 <script type="text/javascript" src="jquery-1.12.3.min.js"></scri ...

  8. Baltic2008联合内阁

    Description      N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如 ...

  9. Android之常用Git命令

    Android之常用Git命令 代码修改后提交步骤:git status:查看代码修改状态git diff:查看代码修改细节,也能看代码空格git add . :添加新加入的代码git commit ...

  10. contiki-定时器etimer

    Contiki内核是基于事件驱动和Protothreads机制,事件既可以是外部事件(比如按键,数据到达),也可以是内部事件(如时钟中断).定时器的重要性不言而喻,Contiki提供了5种定时器模型, ...