P1666前缀单词】的更多相关文章

P1666 前缀单词 tire树上跑dp 首先将trie树建出来,然后对于每个节点.考虑他的子节点. 子节点的方案数都互不干扰,所以子节点与其他子节点的的方案数可以利用乘法原理算出来. 然后如果这个节点是一个字符串的结尾.那么这个字符串可以单独作为一个集合.然后方案数+1. 如若无子节点,则这个节点是trie树中的叶子节点.那么有两种方案,选与不选. 然后如此做一个树形dp就可以了. #include<cstdio> #include<algorithm> #include<…
题意:给n个单词,如果单词a为单词b的前缀则a,b不能共存,问能共存的集合数(包括空集) 一道dp题,排序后判断,f[i][j]表示i和j是否能共存,f[i][j]=1表示能共存,初始化dp[i]=1,表示只有i一个单词,dp[i]表示前i个单词且一定含有第i个单词的集合数,如果f[i][j]=1,则dp[j]+=dp[i] (size(j)>=size(i)) 代码 #include<bits/stdc++.h> using namespace std; string a[60]; l…
题目传送门点我传送 Ⅰ.字典树+树型DP 非常奇妙的一种解法 第一部分:构建树 先对来的单词读入,插入字典树 然后对于一颗字典树,其实是有很多无用边的,所以我们需要删去一些边 删去非单词节点和非单词节点之间的边,其实就是下面这个函数 void rebuild(int now,int fa) { if(isok[now])//当前节点是单词 { vec[fa].push_back(now);//连边 fa=now;//换爸爸了 } for(int i=1;i<=26;i++) { if(!tree…
题目链接:https://www.luogu.org/problemnew/show/P1666 10.13考试题 当时没想出来,觉得是要用trie做,在trie上跑一个树形dp 结果是写了个子集枚举还炸了 后来这道题可以暴力+string类型解 还是string用的少啊 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long…
校内资格赛题目,差点高一就要\(\tt{AFO}\)了 30分思路 对30%的数据,满足$1≤n≤10 $ 所以我们可以子集枚举,实际得分40pts #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int read(){ int k=0; char c=getchar();…
题目链接 考试时暴搜50分...其实看到"单词","前缀"这种字眼时就要想到\(Trie\)的,哎,我太蒻了. 以一个虚点为根,建一棵\(Trie\),然后\(dfs\), 以当前点为根的答案就是\(Ans_u=(\prod_{\text{v是u的子树}}Ans_v)+\text{有单词以这个点结尾 ? 1 : 0}\),乘法原理嘛,如果有单词在这里结尾,那么就多一种情况:选这个单词且不选所有子树. 答案就是\(Ans_{\text{根}}\) #include &…
传送门 先把所有字符串按照字典序排序一下 会发现有字符串x和y(x再y前面,即字典序小),如果x不是y的前缀,那么在x前面不是x前缀的字符串也不是y的前缀 这样就可以DP了 f[i][j]表示前i个字符串中选j个,且第j个必须选字符串i.有多少种集合, #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 101 #define LL l…
Given a set of words (without duplicates), find all word squares you can build from them. A sequence of words forms a valid word square if the kth row and column read the exact same string, where 0 ≤ k < max(numRows, numColumns). For example, the wor…
题目大意 :Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).(单词互不相同) 代码: #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<queue> #include<algorithm> #includ…
pri- 前缀pri-来源于拉丁语的这几个形容词“prim.us”, “prim.a”, “prim.um”,表示“第一的”的意思,和“pri.or”, “pri.or”, “pri.us”,是“优先的”的意思,还来源于拉丁语名词principium. 表示“首要的”的意思,例如这个单词:primary adj.首位的,主要的.记住这个单词,是不是就记住了前缀'pri-'啦? 再来几个同前缀单词: prima adj.第一的,主要的 prime adj.首位的,主要的 primitive adj…