DP
WA自动鸡
这个作者很懒,什么都没留下…
展开
-
求树的重心
树的重心为f[i]最小的点 // 树的重心:最大子树的结点数最小 // f[i]:以i为根的最大子树的结点数 // size[i]:以i为根的子树的结点数 int f[maxn],size[maxn],all; vector<int> ve[maxn]; void dfs(int u,int fa){ size[u]=1; for(int v:ve[u]){ if(v==fa) continue; dfs(v,u); size[u]+=size[v]; f[u]=max原创 2021-09-15 19:36:40 · 64 阅读 · 0 评论 -
dp / 容斥原理
链接 容斥原理 奇加偶减 A∪B∪C=A+B+C−A∩B−A∩C−B∩C+A∩B∩CA∪B∪C=A+B+C-A∩B-A∩C-B∩C+A∩B∩CA∪B∪C=A+B+C−A∩B−A∩C−B∩C+A∩B∩C 枚举:采用二进制(全排列) #include <bits/stdc++.h> #define int long long using namespace std; const int maxn=1e6+5; const int mod=1e9+7; const int inf=1e18; in原创 2021-09-15 19:35:37 · 96 阅读 · 0 评论 -
悬线法【动态规划】
2019 ICPC 银川 K.Largest Common Submatrix 悬线法参考原创 2021-04-09 17:17:29 · 107 阅读 · 0 评论 -
第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明)I.Simone and graph coloring【最长下降子序列 / 树状数组】
Link 树状数组 / 最长下降子序列 题意 给定n个数字,对所有的逆序对建边,构成一个无向图,现对所有的点进行染色,求一种染色方案,使得相邻结点颜色不同,且使用颜色数最少 分析 若模拟情况,会发现逆序对数最多是n2n^2n2数量级,所以建边的话会炸时空,显然考虑找性质规律 任找两组数据进行模拟 4 3 2 1 —> 1 2 3 4 5 4 3 1 2 —> 1 2 3 4 4 发现第i号数的答案为以i为结尾的最长下降子序列 考虑两种方法 用数据结构,即树状数组:对于第i号数,找到原创 2021-04-06 18:10:55 · 114 阅读 · 0 评论 -
ACM-ICPC 2017 Asia Urumqi A.Coins【概率dp / 期望dp】
Link 概率dp/期望dp 题意 n个硬币初始朝下,掷m次,每次任意选k个投掷,问在采取最优策略下(使朝上硬币尽可能多),m次后朝上的硬币的数量的期望是多少? 分析 最优策略:尽可能的选朝下的硬币投掷 令dp[i][j]表示为投i次后有j个硬币朝上的概率 令x为第i次投掷完后,k个硬币中有x个朝上(0<=x<=k) 考虑转移方程。 由于采取最优策略,假设所取硬币全部朝下,则dp[i][j]对dp[i+1][j+x]有贡献。 假设由于朝下硬币数量过少,无法取到k个,则需由朝上硬币代替原创 2021-03-23 22:24:08 · 115 阅读 · 1 评论 -
P2518 [HAOI2010]计数【数位dp、康托展开】
Link 数位dp / 康托展开 Tips 当题目要用到排列组合,却未让你取模时,用以下形式求排列组合比较稳 注意将数组定义为double、或long double 其范围在1e300多,可求至100! void init(){ A[0][0]=C[0][0]=1; for(int i=1;i<maxn;i++){ for(int j=0;j<=i;j++){ if(j==0) A[i][j]=1; else A[i][j]=A[i][j-1]*(i-j+1); if(原创 2021-04-06 13:48:26 · 141 阅读 · 0 评论 -
P2602 [ZJOI2010]数字计数【数位dp】
Link 数位dp #include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; const int mod=998244353; const long long inf=1e18; const int base=131; const double pi=3.1415926; #define ll long long #define int long long #define ull unsigned long long #原创 2021-04-05 21:39:14 · 1637 阅读 · 2 评论