3942 - Remember the Word Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing that Ray has a photographic memory and this may not trouble him, Neal gives it to Jiejie. Since Jiejie can't remember number…
看题传送门:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1943 给出一个由S个不同单词组成的字典和一个长字符串,把这个字符串分解成若干个单词的连接(单词可以重复使用),有多少种方法?比如有4个单词a .b .cd.ab,则abcd有两种分解方法:a+b+cd和ab+cd 用DP来做的话,设dp[i]表示从i开始的字符串到…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2286 [题意] 给定一棵树,切断一条树边代价为ci,有m个询问,每次问使得1号点与查询的k个点不连通的最小代价. [思路] 虚树+树上DP. 构建虚树,这里学了一个比较机智的构图方法:当询问点之间存在子孙后代关系时只保留最上面的节点. 在这种构图方式的基础上进行树上DP,设f[u]表示以u为根的子树,则有转移式: f[u]=min{mn[u] , sum(f[v])},u不是资源点…
正解:虚树+树上dp 解题报告: 传送门! 首先解释一下题意趴,,,语文70pts选手已经开始看不懂题辣QAQ 大概就是个给一个图,求独立集方案,且保证图是联通的,边的数量最多只比点多10 首先思考如果边的数量=点的数量-1,也就是一棵树的时候怎么搞? 直接树上dp就好,f[i][0/1]:选/不选第i个点方案数,转移就f[i][0]=∏(f[son][0]+f[son][1]),f[i][1]=∏f[son][0] 然后考虑多的边怎么搞呢 从上面那个思路自然而然地可以考虑到,可以暴力枚举非树边…
luoguP4383 [八省联考2018]林克卡特树(树上dp,wqs二分) Luogu 题解时间 $ k $ 条边权为 $ 0 $ 的边. 是的,边权为零. 转化成选正好 $ k+1 $ 条链. $ k \le 100 $ 的部分. 毫无疑问是树上打背包dp. 但具体设计还要注意一下. 一个问题是单点成链,这个要特判. 之后由于选择的都是链,所以每个点的度数不会超过2. 这样方程就出来了. $ k \le n $ 的部分. 很明显不能背包了. 但"选正好k个求最大权值和"这个要求如果…
Link: LA 3942 传送门 Solution: 感觉自己字符串不太行啊,要加练一些蓝书上的水题了…… $Trie$+$dp$ 转移方程:$dp[i]=sum\{ dp[i+len(x)+1]\} (x为从第i位开始的字符串的前缀)$ 计算一个字符串前缀的多模式匹配在$Trie$树上跑一遍就行啦! Code: #include <bits/stdc++.h> using namespace std; ,MOD=; bool vis[MAXN]; char s[MAXN],tmp[MAXN…
/** 题目:UVALive 3942 Remember the Word 链接:https://vjudge.net/problem/UVALive-3942 题意:给定一个字符串(长度最多3e5)和m个单词(每个单词长度最多100).单词都是不同的.该字符串可以由若干个单词组成,问最多有多少种组合方式. 思路:字典树+dp 用字典树处理好m个单词,定义dp[i]表示从i开始的字符串可以由单词组成的方式数. 那么dp[i] += dp[i+j]; j表示某个单词和字符串的[i,i+j-1]匹配…
Prelude 题目在这里:ο(=•ω<=)ρ⌒☆ Solution 蒟蒻__stdcall的第一道虚树题qaq. 首先很容易发现,这个排列是假的. 我们只需要求出每对点之间的颜色数量,然后求个和,然后再乘以\((n-1)!\)再乘以\(2\)就好啦! 如何求出"每对点之间的颜色数量之和"呢? 似乎点分可以做,并且fc确实写出了点分的做法,但是有更简(ma)单(nong)的虚树做法. 我们对每种颜色分开考虑,对于每种颜色\(c\),我们考虑有多少条路径经过了颜色\(c\),然后再…
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1943 题目大意: 给定一个字符串和给定一个单词集合.问从给定单词集合中选取单词,有多少种选取方法刚好拼接成字符串. 例如: abcd 4 a b cd ab 有两种 a-b-cd ab-cd 这两种情况 解题思路: 因为给定的字符串的长度是3*10^5所以暴力就不能解决问题了…
题目传送门 题意:(训练指南P209) 问长字符串S能由短单词组成的方案数有多少个 分析:书上的做法.递推法,从后往前,保存后缀S[i, len-1]的方案数,那么dp[i] = sum (dp[i+len(s)]).用字典树记录并查询短单词的前缀的长度. #include <bits/stdc++.h> using namespace std; const int L = 3e5 + 5; const int N = 4e3 + 5; const int M = 1e2 + 5; const…