问题描述:

字母(Trie)树是一个表示一个字符串集合中所有字符串的前缀的数据结构,其有如下特征:
1.树的每一条边表示字母表中的一个字母
2.树根表示一个空的前缀
3.树上所有其他的节点都表示一个非空前缀,每一个节点表示的前缀为树根到该节点的路径上所有字母依次连接而成的字符串。
4.一个节点的所有出边(节点到儿子节点的边)中不存在重复的字母。  
现在Matej手上有N个英文小写字母组成的单词,他想知道,如果将这N个单词中的字母分别进行重新排列,形成的字母树的节点数最少是多少。

输入格式:

第一行包含一个正整数N(1<=N<=16)
接下来N行每行一个单词,每个单词都由小写字母组成。
单词的总长度不超过1,000,000。

输出格式:

输出仅一个正整数表示N个单词经过重新排列后,字母树的最少节点数。

样例输入输出:

10
jgda
dbfdjj
hehegdfh
faeejic
acagdgfcjc
jifiigdbif
fdbdii
ch
c
adccdd


42

问题描述专门大肆宣传了一番trie还是naive了,题目后面加了一个trie也是too young。 这明显就是个状压DP,n<=16如此醒目吼吗。贴一波代码。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int sums=(1<<17),inf=1e9,maxn=1000050;
int n,len[30],i,j,k,b[30][30],f[sums];
char a[maxn];
int main()
{scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",a+1);len[i]=strlen(a+1);//cout<<len[i]<<endl;for(j=1;j<=len[i];j++)b[i][a[j]-'a']++;//cout<<a[j]-'a'<<endl;}f[0]=inf;for(i=0;i<(1<<n);i++)//枚举所有状态 {int sum=0; for(j=0;j<n;j++){if((1<<j)&i)f[i]+=len[j];//记录至多需要的节点数 }for(k=0;k<=25;k++){int minn=inf;for(j=0;j<n;j++)if((1<<j)&i)minn=min(minn,b[j][k]); sum+=minn;//记录当前集合中每种字母在单一串中出现的最小值之和 }for(j=i;j;j=(j-1)&i){f[i]=min(f[i],f[j]+f[i^j]);}if(f[i]>sum)f[i]-=sum;//有了前面求的sum,就可以直接更新f[i] }printf("%d",f[(1<<n)-1]+1);//记得要+1,字典树。。。。。
}

nkoj 中山纪念中学 trie相关推荐

  1. NKOJ4191中山纪念中学 Trie(状压dp)

    问题描述: 字母(Trie)树是一个表示一个字符串集合中所有字符串的前缀的数据结构,其有如下特征: 1.树的每一条边表示字母表中的一个字母 2.树根表示一个空的前缀 3.树上所有其他的节点都表示一个非 ...

  2. 【2012年中山纪念中学信息学竞赛初一选拔赛一】美丽的纪中(a)

    [2012年中山纪念中学信息学竞赛初一选拔赛一]美丽的纪中(a) (File IO): input:a.in output:a.out 时间限制: 1000 ms 空间限制: 262144 KB [题 ...

  3. 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中篮球联赛(b)

    [2012年中山纪念中学信息学竞赛初一选拔赛一]纪中篮球联赛(b) (File IO): input:b.in output:b.out 时间限制: 1000 ms 空间限制: 262144 KB [ ...

  4. 中山纪念中学集训日志

    7.31 下了一天的雨,坐了一天的车. 中山纪念中学,满目绿树朱瓦,历史感挺浓的. 想起了一年前,我兴致勃勃地看苏卿念的纪中培训日记,没想到一年后,我亲身来到了纪中. 在宿舍跟蚊帐搏斗了许久,真是剪不 ...

  5. 2019中山纪念中学夏令营-Day21[JZOJ]

    2019中山纪念中学夏令营-Day21[JZOJ] 提高组(B组模拟赛)Team_B (由于本人太弱,并没有订正完题目) (题解大部分是从官方题解文件上摘来的) 日常膜拜大神:じやゆん蒟蒻 正文部分: ...

  6. 中山纪念中学套题(1)

    哈哈哈,本博客的第一张,讲的就是我在中山纪念中学的一套普及组的题目. ----------------------------------------------------------------- ...

  7. 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中作业(c)

    [2012年中山纪念中学信息学竞赛初一选拔赛一]纪中作业(c) (File IO): input:c.in output:c.out 时间限制: 1000 ms 空间限制: 262144 KB [题目 ...

  8. 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】

    Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...

  9. 2019.1.23 中山纪念中学之北大教授讲座

    long long ago 早已经听闻了在我们去中山纪念中学训练的过程中,北京大学信息学冬令营会在纪中举行.我们还期望着观摩一下这些来自全国各个信息强省强校的大佬们呢. day-3 三天前的下午,一大 ...

最新文章

  1. php数组重复值销毁,如何从PHP中删除数组中的重复值
  2. 大厂,常用,四款,大屏可视化工具
  3. Pytorch中的optimizer.zero_grad和loss和net.backward和optimizer.step的理解
  4. 真正决定分辨准确率的是图片重叠的区域
  5. 比特币官方客户端钱包是用什么语言开发的_『学概念找员外』比特币网络(三)...
  6. boost::core模块实现分配构造throws
  7. Dalvik分析(二)
  8. 数组方法大全ES5+ES6
  9. C++工作笔记-for与foreach之间的初步比较(反汇编初步窥探)
  10. Jquery根据JSON生成Table
  11. FPGA之SSI接口协议实现
  12. H5架设新手小白搭建教程(是用于新手)
  13. K210(SiPEED MaixBit)MicroPython使用参考(一、软硬件环境)
  14. 《都挺好》苏大强,锦鲤杨超越,表情包为何会刷屏?
  15. __DSB()指令的作用
  16. 无迹卡尔曼滤波估计SOC的simulink模型详解
  17. 王者荣耀有史以来被削废的英雄盘点:还记得那个超级兵吗?
  18. GAN原理及Pytorch框架实现GAN(比较容易理解)
  19. 【网络工程师配置篇】华为RIP路由基础配置续篇——重分发
  20. 程序员的工匠精神何在?何来?

热门文章

  1. 数字增加滚动动画用原生js实现的多种方案
  2. 做共享软件的一些心得与经验
  3. 我们离成为C++、C#、MySQL之父有多远?
  4. [轻笔记] label smoothing(标签平滑)
  5. mac 连接windows远程桌面软件Parallels Client
  6. 一篇文章带你了解Linux
  7. 简述驱动桥的动力传递路线_汽车驱动桥概述
  8. Word图片上传控件(WordPaster)更新-2.0.15版本
  9. 方孔分段的lisp_cad怎么把一条线直接分段
  10. Android之ListView自带的布局simple_list_item