- 博客(6)
- 收藏
- 关注
原创 51nod 1791 合法括号子段 DP
思路: DP[i] 表示以i结尾的方案数,模拟一遍括号匹配过程就好了 代码: #include using namespace std; #define MEM(a,b) memset(a,b,sizeof(a)) #define PB push_back #define MP make_pair #define X first #define Y second #define bug
2017-07-31 19:51:59 221
原创 G. Snake Rana 容斥原理
题意: 统计网格矩形的子矩形数目,其中要求每个格子不能包含一些特殊格子(特殊格子小于20) 思路:统计格子是个老问题,sum=n*(n+1)/2*m*(m+1)/2 这里要求一些格子不合法,显然用总答案减去非法答案更容易计算。 计算非法答案时k 代码: #include using namespace std; #define MEM(a,b) memset(a,b
2017-07-31 19:30:26 322
原创 hdu 6035 树分治
题意: 一棵树,路径的权值等于路径上颜色的种类,问全部路径的价值和 思路: 题解的方法就不多讲了,这里提供一个树分治做法,首先要将原问题转换为每种颜色的经过路径数量的总和(也就是计算每种颜色的贡献,贡献为经过这种颜色的路径数量) 树分治的做法则为,维护重心下的子树第一次出现某种颜色的位置,通过这个位置已经这个点下面的子树大小,和一个相同颜色所有第一次出现的子树大小和来计算(
2017-07-30 17:19:58 350
原创 hdu 6053 莫比乌斯函数(容斥)
题意:两个序列,A,B,A序列给出,Bi 思路:枚举B整体的GCD,直接枚举显然会重复计算,顾使用莫比乌斯进行容斥,单组因子的方案数就是sum (ai/p) 显然直接枚举时间复杂度为n*m m=min ai ,在这里我们做一个桶的处理,并求后缀和,就直接计算出 ai/p =ni 的个数 知道所以的ni就可以算出sum (ai/p) ,这里处理的方法类似筛法,时间复杂度约为nlog
2017-07-27 19:56:31 1735
原创 poj 1741 点分治
题意,一棵树,边有权值,问有多少点对之间的路径 思路,树分治基础,直接点分治,合并的时候分边依次计算。维护处理边的dis数组和某重心已经处理过的dis数组就好了,记得保证有序性方便二分计数。 代码: //#include #include #include #include using namespace std; #define X first #define Y s
2017-07-26 20:53:00 260
原创 hdu 4507 数位DP(求和类型)
中文题,题意略,老年人康复练习 数位DP, 和一般的不同,这种数位dp统计数字和或者数字平方和 注意取模!!! 代码: #include using namespace std; typedef long long ll; int a[20]; const ll mod=1e9+7; ll po[20]; struct D{ ll cnt,sum,sum2;
2017-07-21 13:35:06 252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人