【Luogu】P1411树(树形高精DP)】的更多相关文章

题目链接 我貌似又做了一道高精题呢(笑) 这题的DP方程很好想,设f[i][j]表示i为根的子树,i所在联通块大小为j的最大值,然后乱搞 但是要高精,那么搞是得要高精除的 所以考虑f[i][j]是除以j后的最大值,就可以只写高精乘了 不过卡常,下面代码只能得95分 // luogu-judger-enable-o2 // luogu-judger-enable-o2 #include<cstdio> #include<iostream> #include<cctype>…
大意: 给定树, 求删除一些边, 使得连通块大小的乘积最大 设$dp_{i,j}$表示只考虑点$i$的子树, $i$所在连通块大小为$j$的最大值. 转移的时候不计算$i$所在连通块的贡献, 留到最后再算. 这题答案很大, 还要套个高精, 这是没套高精的代码 #include <iostream> #include <sstream> #include <algorithm> #include <cstdio> #include <cmath>…
(同样也是noip往年的题 1​.矩阵取数游戏 题目链接[Luogu P1005 矩阵取数游戏] \(\mathcal{SOLUTION}:\) 通过对题目条件的分析,我们可以发现,每一行取数对答案的影响是互相独立,互不影响的.所以我们可以从一个1*m的矩阵开始研究: 因为每次取数只能取最左边或最右边,这又简化了我们的思路: 我们设\(dp[i][j][k]\)表示第i轮取数后,还没有取的区间范围为[j,k],形象一点的话:k-j+1(区间长度)=m-i; 考虑转移:对于\(dp[i][j][k…
题意 给一棵树,你可以匹配有边相连的两个点,问你这棵树的最大匹配时多少,并且计算出有多少种最大匹配. N≤1000,其中40%的数据答案不超过 108 题解 显然的树形DP+高精. 这题是作为考试题考的,因为记得有一次考试,状态用两个数组存. 所以看到这题瞬间想到状态dp[i][0/1]代表以i为根的子树不选/选i点的最大匹配数. f[i][0/1]代表以i为根的子树中不选/选i形成最大匹配的方案数. 然后方程改了半天:而且极长所以看代码吧. TM还要加高精... (第一个点挂了,特判过的) #…
Description 如果一棵树的所有非叶节点都恰好有n个儿子,那么我们称它为严格n元树.如果该树中最底层的节点深度为d (根的深度为0),那么我们称它为一棵深度为d的严格n元树.例如,深度为2的严格2元树有三个,如下图: 给出n, d,编程数出深度为d的n元树数目. Input 仅包含两个整数n, d( 0   <   n   <   =   32,   0  < =   d  < = 16) Output 仅包含一个数,即深度为d的n元树的数目. Sample Input […
设f[i]为深度为i的n元树数目,s为f的前缀和 s[i]=s[i-1]^n+1,就是增加一个根,然后在下面挂n个子树,每个子树都有s[i-1]种 写个高精就行了,好久没写WA了好几次-- #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=55,mod=1e8; int n,m; struct qwe { long long a[N]; void…
3572: [Hnoi2014]世界树 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1084  Solved: 611[Submit][Status][Discuss] Description 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持续运转的根本基石.世界树的形态可以用一个数学模型来描述:世界树中有n个种族,种…
2286: [Sdoi2011消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2120  Solved: 752[Submit][Status][Discuss] Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战斗,我军胜利在望.已知在其他k个岛屿上有丰富能源,为了防止敌军获取能源,我军的任务是炸毁…
BZOJ 洛谷 http://www.cnblogs.com/LadyLex/p/7326874.html 插头DP.\(m+1\)个插头的状态需要用三进制表示:\(0\)表示无插头,\(1\)表示是左括号插头,\(2\)表示是右括号插头.为了方便用两位的二进制写.所以还需要个哈希表存状态. 转移的时候,对于左边上边这两个插头,如果某个插头为\(0\),很好转移.否则就分\(4\)种情况讨论下.不写了..见上面的链接. 还需要高精度.其它就是些细节了. 转移时特判下边界外有插头就不转移,会方便很…
我不会高精…… 也不会DP…… 这道题即考高精又考DP…… 我要死了 给一个不是高精的代码(当然不能满分) #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; +; ; int n,m; int a[maxn],f[maxn][maxn],aa[maxn],bb[maxn],ans[maxn]; int main() {…