- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多重背包 第i种物品有选0件,选1件,选2件…选k[i]件等选择 将第i种物品拆成k[i]个普通物品,转化为0/1背包 复杂度:O(V*Σ物品个数) 将第i种物品拆分成1,2,4,...,2^(x-1),k[i]-2^x+1个物品,其中x是满足k[i]-2^x+10的最大整数 如此拆分,可以拼凑出0..k[i]个物品 复杂度:O(V*Σlog物品个数) 双端单调队列优化多重背包 mod 复杂度:O(V*N) 分组背包 这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。 for 所有的组k for v V..0 for i属于组k f[v]=max{f[v],f[v-c[i]]+w[i]} 时间复杂度 O(VN) 动态规划常见题目模式 记忆化搜索 区间动态规划 树形动态规划 Trie AC自动机* 环+外向树* SAM* 背包问题 状态压缩动态规划 基于连通性的状态压缩动态规划* 数位统计 标*号的内容提高组选手不必掌握 动态规划常用优化 加速转移 单调队列 线段树/树状数组/平衡树* 斜率优化* 四边形不等式(决策单调性) 矩阵乘法* 状态设计/转移更新 前缀和 休息时间 Nearby Cows FJ有N个草地(1=N=100000),有N-1条双向道路连接这些草地,FJ精心设计了这些道路使每两个草地有且仅有一条简单路径连接。 第i个草场有Ci头牛,有时候奶牛会走过最多K条道路到其他草地吃草。FJ想知道每个草场最多可能有的奶牛数量Mi,即所有走过K条道路后可能到达i的奶牛总数。 1 = K = 20 Usaco 2012 Feb Nearby Cows “FJ有N个草地(1=N=100000),有N-1条双向道路连接这些草地,FJ精心设计了这些道路使每两个草地有且仅有一条简单路径连接。” 题目精心地告诉你一个字:树 对树中每个点x,求到点x的距离不超过20的点的权值和 down[i,0..20] 表示 深度-点i深度=0..20 的点的权值和 up[i,0..20] 表示 点i深度-深度=0..20 的点的权值和 2遍树形DP解决 第一遍由下至上求down[] 第二遍由上至下利用down[]求up[] 时间复杂度 O(N * 20) Bag of mice 龙和公主博弈,公主先手。 包里有w只白老鼠和b只黑老鼠,双方轮流从包里随机抽出一只老鼠,谁先抽出白老鼠谁为胜者。 特殊地,龙抽出老鼠后,包里随机一只老鼠会因恐惧,自己跳出背包。 没人抽出白老鼠时,龙为胜者。 求公主获胜的概率。 0 = w, b = 1000 CodeForces 148 D Bag of mice 无后效性 记f[i][j]为包里有i只白老鼠,j只黑老鼠时,公主先手的胜率 当前状态仅与包里两种老鼠个数有关,与之前的抽取情况无关 特殊选手:龙 龙抽出老鼠后会有随机一只老鼠逃跑 计算f[i][j]需要一次模拟公主和龙的行动 记忆化搜索 一道比较适合使用记忆化搜索的题目 比较直观 Porcelain 给定n个架子,每个架子上从左至右排有不超过100个物品,每个物品有自己的价值。 从某个架子取物品时,只能取走最左端或最右端的物品。 取m个物品,使价值总和最大。 1= n = 100, 1 = m = 10000 CodeForces 148 E Porcelain 取物品? 分组背包问题 每个架子是一个“物品”,在0..100的不同“重量”下有不同的“价值” 从最左端和最右端取? 如何求每个架子的“价值”? DP? 枚举! 时间复杂度 O(n * 100^2 + n * m * 100) n * m * 100 = 10^8,为什么可以 ? Martain Strings 给定一长度为n的大写字母串S,以及m个长度不超过1000的大写字母串s[1]..s[m]。求s[i]是否满足: 存在a, b, c, d, 满足1 = a = b c = d =n s[i] 是 ( S[a..b] + S[c..d] ) 的子串 “+”表示字符串的连接 2 = n = 10^5, 1 = m = 100 CodeForces 149 E Martain Strings 分析条件:s[i]是否满足: 存在a, b, c, d, 满足1 = a = b c = d =n s[i] 是 ( S[a..b] + S[c..d] ) 的子串 枚举分界点 设分界点为x 设s[i]在S[1..x]中的最长前缀长度为L 设s[i]在S[x+1..n]中的最长后缀长度为R 若L + R = length(s[i]),则s[i]满足条件 求L,R kmp hash +
文档评论(0)