P2465 [SDOI2008]山贼集团 dp】的更多相关文章

这个题是一道树形dp+状压dp二合一,先预处理每种组合会有什么额外的费用,然后在树上dp就行了. 题干: 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连.小村落用阿拉伯数字编号为1,,,,…,n,山贼集团的总部设在编号为1的小村落中.山贼集团除了老大坐镇总部以外,其他的P个部门希望在村落的其他地方建立分部.P个分部可以在同一个小村落中建设,也可以分别建设在不同的小村落中.每个分部到总部的路径称为这个部门的管辖范围,于…
裸的状压dp. 设f[i][j]表示在i字数内放j集合的分部,直接sb转移. // luogu-judger-enable-o2 #include<bits/stdc++.h> #define il inline #define vd void typedef long long ll; il int gi(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-')f=-1; ch=getchar(); } while…
题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由\(N\)个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连. 小村落用阿拉伯数字编号为\(1,2,3,4, \dots ,n\),山贼集团的总部设在编号为\(1\)的小村落中. 山贼集团除了老大坐镇总部以外,其他的\(P\)个部门希望在村落的其他地方建立分部. \(P\)个分部可以在同一个小村落中建设,也可以分别建设在不同的小村落中.每个分部到总部的路径称为这个部门的管辖范围,于是这\(P\)个分部的管辖范围可能重叠,或…
非常好的一道题 树上的状压\(dp\) 根据数据范围我们就能知道这是一道需要状压的题目 所以状态就是\(dp[i][S]\)表示在以\(i\)为根的子树里,选择的状态为\(S\)的最大收益 这个收益只是在子树内部的收益,我们往上转移的时候继续加 显然这个东西类似于一个树上背包,我们子树和根顺次合并就好了 由于这里的体积是状态,所以我们可以直接枚举子集进行转移 方程 \[dp[i][s]=max(dp[j][t]+dp[i][s\ xor\ t])\] 代码 #include<cstring>…
今天一月一号.. 突然想安利一波我的中二的2017总结... 传送门1:codevs 传送门2:luogu 时限5s和1s的区别(你没看我传送门都给的大牛分站了) 现在不仅线筛.. 有负数的快读都打不对了.. 来比较一下他们的区别? inline int gn(int a=0,char c=0,int f=1){ for(;(c<48||c>57)&&c!='-';c=getchar());if(c=='-')f=-1,c=getchar(); for(;c>47&…
山贼集团 (group) 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连.小村落用阿拉伯数字编号为1,2,3,4,-,n,山贼集团的总部设在编号为1的小村落中.山贼集团除了老大坐镇总部以外,其他的P个部门希望在村落的其他地方建立分部.P个分部可以在同一个小村落中建设,也可以分别建设在不同的小村落中.每个分部到总部的路径称为这个部门的管辖范围,于是这P个分部的管辖范围可能重叠,或者完全相同.在不同的村落建设不同的分部需…
题目链接 写了个70分暴力还挂了,第一遍提交只拿了十分……海星 首先建虚拟节点多叉树转成二叉,然后子集枚举DP 设g[x][i]是以x为根的子树内山贼集合i,x啥都不选也没贡献的时候的最大价值 f[x][i]是要求的答案 然后状压DP即可. #include<cstdio> #include<algorithm> #include<cctype> #include<cstring> #include<cstdlib> #define maxn 2…
在动态规划的题型中,一般叫什么DP就是怎么DP,状压DP也不例外 所谓状态压缩,一般是通过用01串表示状态,充分利用二进制数的特性,简化计算难度.举个例子,在棋盘上摆放棋子的题目中,我们可以用1表示当前位置摆放棋子,用0表示当前位置不摆放棋子. 这样的话,就能够直接运用许多二进制运算的特性来实现对时间和空间的优化 例如:如果给你一个\(n*m\)的棋盘,让你放棋子,但是棋子两两不能相邻,求方案数 我们仅考虑暴力枚举每一行的情况,如果是普通用数组来存储,判断的时候对于相邻两行需要一个数一个数的看,…
[BZOJ2037][Sdoi2008]Sue的小球 Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一个秘密武器,只要她将小船划到一个彩蛋的正下方,然后使用秘密武器便可以在瞬间收集到这个彩蛋.然而,彩蛋有一个魅力值,这个魅力值会随着彩蛋在空中降落的时间而降低,Sue要想得到更多的分数,必须尽量在魅力值高的时候收集这个彩蛋,而如果一个…
题意 题目链接 Sol 首先不难想到一个dp,设\(f[i][j]\)表示\(i\)的子树内选择的最小值至少为\(j\)的最大个数 转移的时候维护一个后缀\(mx\)然后直接加 因为后缀max是单调不升的,那么我们可以维护他的差分数组(两个差分数组相加再求和 与 对两个原数组直接求和是一样的) 向上合并的过程中对\(a[x]\)处\(+1\),再找到\(a[x]\)之前为\(1\)的位置\(-1\)即可 (怎么感觉暴力区间加也可以qwq) 复杂度\(O(nlogn)\) // luogu-jud…