RQNOJ 429 词链
来源:互联网 发布:nokia n8软件下载 编辑:程序博客网 时间:2024/05/17 04:08
RQNOJ 429 词链
题目描述
传送门
给定一个仅包含小写字母的英文单词表,其中每个单词最多包含50个字母。
如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链。例如下面的单词组成了一个词链:
i
int
integer
而下面的单词不组成词链:
integer
intern
请在给定的单词表中取出一些词,组成最长的词链。最长的词链就是包含单词数最多的词链。
数据保证给定的单词表中,单词互不相同,并且单词按字典顺序排列。
输入格式
第一行一个整数n(n<=10000),表示单词表中单词数
下接n行每行一个单词。
输出格式
一个整数,表示最长词链长度。
样例
Input
5iintintegerinterninternet
Output
4
主要思路
一眼看上去,便知这是一道dp题目,并且是一道典型的类似01背包型的题目,只不过添加了字符串,用dp[i]表示当前选到第i个字符串,所构成的最长词链的长度是多少,再枚举j,看哪些词能与当前字符串构成词链,dp方程不难推出:
如果字符串i与j能够成词链:
看上去很简单是不是?相信大家都想到了。但是!这是n^2的复杂度,n<=10000!
于是,TLE,80分…
因此,我们需要进行一些优化。转过头来看题目描述,发现:
并且单词按字典顺序排列
所以,我们大可以不必枚举完,只需逆序枚举j,一但找到,果断break掉,便可省去一半的复杂度,并且能够保证是最优解,于是,奇迹般地AC了…
下面,为大家展示我用上了STL大法,主函数仅约20行的代码:
代码如下
#include <iostream>#include <cstdio>#include <vector>#include <queue>#include <cmath>#include <algorithm>#include <cstdlib>#include <ctime>#include <map>#include <stack>#include <cstring>using namespace std;#define ll long long//请忽略以上的内容int n,ans=0;string a[10005];//不情愿地用上了速度极慢的stringint dp[10005];int main(int argc, char const *argv[]){ ios::sync_with_stdio(false);//流加速 cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { for(int j=i-1;j>0;j--)//逆序枚举 { int la=a[i].size(),lb=a[j].size();//求长度 string b=a[i].substr(0,lb);//STL大法好! /* 插播substr()函数详解: 此处意为将a[i]这一字符串从下标0开始截取长度为lb的一个子串 由此可保证b串与a[j]长度相等,便可以比较 */ if(la>=lb && b==a[j]) { dp[i]=max(dp[i],dp[j]+1); break;//如果找到,break掉 } } ans=max(ans,dp[i]);//求出答案 } cout<<ans+1<<endl;//由于dp数组初值为0,没有包含第一个字符串,所以此处必须要+1 return 0;}
阅读全文
0 0
- rqnoj-429词链
- RQNOJ 429 词链
- rqnoj-429词链-字典树
- RQNOJ LIS专题 201奥运大包围,569Milking Time,429词链
- rqnoj-332 & rqnoj-53
- RQNOJ 164
- RQNOJ 311
- RQNOJ 34
- 决斗 RQNOJ
- rqnoj-153
- rqnoj-394
- rqnoj-3
- rqnoj-12
- rqnoj-93
- rqnoj-4
- rqnoj-1
- rqnoj-2
- rqnoj-20
- man命令
- minicom安装及配置
- Unity入门操作_协程_023
- sql查询集锦(一)
- MySQL · 引擎特性 · InnoDB undo log 漫游
- RQNOJ 429 词链
- 边界判定和激活函数的作用
- 希腊字母表LaTex公式整理
- Spring Boot的启动器Starter详解
- 《剑指offer》笔记-第6章(1)
- 2017年校招全国统一模拟笔试(第五场)偶串
- c++基础之输入(scanf)和输出(printf)
- hdu 1856
- 基础,借用一下偶像名字,嘿嘿