JZOJ5001. Trie树
来源:互联网 发布:召唤师捏脸数据 编辑:程序博客网 时间:2024/05/21 08:51
题目大意
给定
Data Constraint
题解
因为希望节点数尽量少,我们每次必然是尽可能地抽出公共部分作为前缀,那么剩下的就可以划分为两个集合处理了。
然后可以状压了,设
时间复杂度:
SRC
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>using namespace std ;#define N 20 + 10#define M 70000 + 10typedef long long ll ;struct Note { int Cnt[N] ;} W[N] ;char S[M] ;int f[M] ;int n ;int main() { freopen( "trie.in" , "r" , stdin ) ; freopen( "trie.out" , "w" , stdout ) ; scanf( "%d" , &n ) ; for (int i = 1 ; i <= n ; i ++ ) { scanf( "%s" , S + 1 ) ; int len = strlen( S + 1 ) ; for (int j = 1 ; j <= len ; j ++ ) { int x = S[j] - 'a' ; W[i].Cnt[x] ++ ; } } for (int s = 1 ; s < (1 << n) ; s ++ ) { int now = 0 , tot ; for (int i = 0 ; i < 26 ; i ++ ) { int Minv = 0x7FFFFFFF ; tot = 0 ; for (int j = 1 ; j <= n ; j ++ ) { if ( (s >> (j - 1)) & 1 ) { Minv = min( Minv , W[j].Cnt[i] ) ; tot ++ ; } } now += Minv ; } if ( tot == 1 ) { f[s] = now ; continue ; } f[s] = 0x7FFFFFFF ; for (int s1 = s - 1 ; s1 ; s1 = (s1 - 1) & s ) f[s] = min( f[s] , f[s1] + f[s^s1] - now ) ; } printf( "%d\n" , f[(1<<n)-1] + 1 ) ; return 0 ;}
以上.
1 0
- JZOJ5001. Trie树
- hihoCoder1014 Trie树 [Trie]
- TRIE树
- TRIE树
- TRIE树
- trie 树
- Trie树
- Trie树
- Trie树
- Trie树
- trie树
- trie树
- Trie 树
- Trie树
- Trie 树
- trie 树
- Trie树
- Trie树
- tensorflow学习笔记十一:ubuntu16.04下安装TensorFlow(GPU加速)----详细图文教程
- 优秀的程序员
- 二叉树遍历
- 移动端点击穿透遮罩层场景
- Andriod二维码的生成和保存
- JZOJ5001. Trie树
- 智能家居软硬件结合之手机控制电器(Python控制单片机)
- iOS推送
- 各种网站导航
- android ART编译预优化
- 【程序26】 题目:请输入星期几的第一个字母来判断一下是星期几, 如果第一个字母一样,则继续 判断第二个字母。
- Javaxcms
- centos 下git 访问github 的配置
- activiti自动建立数据库失败