
经典题
limboman
这个作者很懒,什么都没留下…
展开
-
bzoj 1937: [Shoi2004]Mst 最小生成树
将原问题对偶成为费用流模型; 写的原始对偶的费用流,然后发现每次增广容量最多为1…mdzz#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=(n);i++)#define rep2(i,k,n) for(int i=k;i>=(n);i--)#define mp make_pair using namespace std;c原创 2016-06-21 19:18:12 · 652 阅读 · 0 评论 -
hdu5290
tree dp; 考虑祖先对孩子的影响: 有g(i,j)表示 i 这个节点获得先祖的 j 深度的赏赐覆盖全部子树的最小代价 考虑孩子对祖先兄弟等的影响: 有f(i,j)表示 i 这个节点覆盖了全部子树且向外延伸j的最小代价 转移显然;#include<cstdio>#include<algorithm>#include<cstring>#define rep(i,k,n) for(i原创 2016-11-13 11:33:16 · 343 阅读 · 0 评论 -
2554: Color
#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)using namespace std;typedef double db;typedef long long ll;const int N=1e4+7;struct f{ db a,b;f(db a=0.0,db b=0.0):a(a),b(b){}}原创 2017-01-11 12:21:56 · 752 阅读 · 0 评论 -
4521: [Cqoi2016]手机号码
比较基本的数位DP,限制都较为简单;#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)#define rep2(i,k,n) for(int i=k;i>=n;i--)using namespace std;typedef long long ll;const int N=13;void upd(ll& x,ll原创 2017-01-06 09:43:55 · 407 阅读 · 0 评论 -
3925: [Zjoi2015]地震后的幻想乡
这道题运用了很多数学知识(唉,真羡慕你们高数好的…….) 首先我们扔掉提示。。。。。 尝试枚举最小生成树的最大边x,令g(x)g(x)表示答案<=x的概率 发现答案可以表示成∫10xg′(x)dx\int_0^1xg^{'}(x)dx 根据分部积分法,原式=1−∫10g(x)dx=∫10(1−g(x))dx1-\int_0^1g(x)dx=\int_0^1(1-g(x))dx 即答案=答案原创 2016-12-23 01:04:32 · 555 阅读 · 0 评论 -
bzoj1893&2371
2004年的论文《优化,再优化》 中所讨论的题的加强版(其实并没有加强多少……); 论文最后给出了n−√\sqrt{n}的复杂度; 其实可以用生成函数给出一种logn\log{n}的做法,而且更加清晰; 首先有递推式: g(i,j)=g(i−1,j)+g(i−1,j−1)+1g(i,j)=g(i-1,j)+g(i-1,j-1)+1 g(1,j)=1g(1,j)=1 1<i,j1<i,j原创 2016-11-27 19:10:59 · 329 阅读 · 0 评论 -
bzoj1115
差分后转变为阶梯博弈#include<cstdio>int u,n,op,l,x,ok;int main(){scanf("%d",&u);while(u--){ l=ok=0;scanf("%d",&n);op^=(n&1); while(n--){scanf("%d",&x);if(op)ok^=x-l;l=x,op^=1;} if(ok)puts("TAK");e原创 2016-12-04 17:08:31 · 441 阅读 · 0 评论 -
bzoj2217:[Poi2011]Lollipop
容易发现题目给的条件对数值的维护增长很慢,故可使用调整法,具体细节见代码#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)#define rep2(i,k,n) for(int i=k;i>=n;i--)using namespace std;void sc(int& x){x=0;char c=getchar();原创 2016-12-12 00:18:10 · 519 阅读 · 0 评论 -
sd省队集训二轮tree
感觉这题应该跟hdu5290很像,结果它们果然系出同源; 这个题应该处于更根源的位置; 根据算法3的思想,令dp[i][j][k]表示以i为根的子树且已经使用了j个黑点,最深未被覆盖的长度或者沿着根最多能覆盖多少长度。 但是这样状态会很多无法存下。 考虑将k表示成还拥有一个黑点k,使得点i为根的子树全被保护。 令T[i]表示[i不是黑点] 枚举k,当点u枚举到一个儿子v原创 2016-11-14 18:04:30 · 463 阅读 · 1 评论 -
bzoj3174 [Tjoi2013]拯救小矮人
首先,我们要证明一定存在一个最优逃生序列ai满足: Aa*i + *Bai <= Aai+1 + Bai+1; 可采用反证法得知对于所有逃生序列ai,交换满足存在: Aa*i + *Bai > Aai+1 + Bai+1 的数对一定不会更差,从而得证; 这样就为我们提供了一个序,然后就可以dp啦#include<bits/stdc++.h>#define rep(i,k原创 2016-10-01 16:32:48 · 291 阅读 · 0 评论 -
4513: [Sdoi2016]储能表
省选被这题虐。。。前段时间推了一晚上终于推出dp式子; 正解是去发现神奇性质,然而数位dp也可以过;#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)#define rep2(i,k,n) for(int i=k;i>=n;i--)using namespace std;const int N=105;typed原创 2016-10-21 20:46:22 · 461 阅读 · 0 评论 -
3072: [Pa2012]Two Cakes
有dp[i][j]=min(d[i-1][j],d[i][j-1])+1 –> a[i]==b[j] dp[i][j]=d[i-t+1][j-t+1]+t —> t为i,j向前最长的不同序列; 但真正需要记录的状态为O(n);#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)using namespace std;原创 2016-10-21 21:16:01 · 379 阅读 · 0 评论 -
1426: 收集邮票
期望乘法独立….#include<bits/stdc++.h>#define rep2(i,k,n) for(int i=k;i>=n;i--)using namespace std;typedef double db;db g,f;int n;int main(){ scanf("%d",&n);g=f=0.0; rep2(i,n-1,0){ g+=n*1原创 2016-10-21 21:47:58 · 292 阅读 · 0 评论 -
2655: calc
dp方程易得,可证明答案总为多项式,拉格朗日插值;#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)#define rep2(i,k,n) for(int i=k;i>=n;i--)using namespace std;const int N=1007;int mod,n,A;void upd(int& x,i原创 2016-10-21 21:50:09 · 305 阅读 · 0 评论 -
3462: DZY Loves Math II
一开始看到这题忽视了S以及问题的特殊性;从而想到了奇怪的方向 注意到构成元素均为S的约数,所以划分n的方案可以分成若干S的和与零散部分; 其中零散部分必不能再拆出S,否则会重复计算; 如此,使用组合数与多重背包即可;#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)#define rep2(i,k,n) for(i原创 2016-10-22 20:46:15 · 368 阅读 · 0 评论 -
2227: [Zjoi2011]看电影(movie)
经典思路:线转化为圈,利用对称性 假设有k+1个椅子围成一圈,每张票上写着1~k+1(而不是1~k),因为概率均等,我们统计有多少种方案导致椅子k+1上坐着人 一共有(k+1)n种可能的情况。为了方便叙述,我们假定每种情况模拟一遍,每次在没人坐的椅子上放一枚硬币(每次恰好有k+1-n把椅子没人坐),则所有情况都模拟完之后每把椅子上都有(k+1-n)(k+1)n-1枚硬币,也就是说,有(k原创 2016-10-22 21:10:22 · 417 阅读 · 0 评论 -
poj3468 zkw线段树
这里使用了zkw线段树; 使标记永久化,并维护sum数组:仅考虑子树的区间和; 这样一个节点对答案的贡献就是子树和加上上方祖先的标记和; 代码中L,R数组均可省去(但由于笔者太懒。。。。。。) 这样就给出了一个与论文中不太一样的sb方法,但各种复杂度还是一样的;#include<cstdio>#define rep(i,k,n) for(int i=k;i<=n;i++)#define原创 2016-11-06 19:06:53 · 457 阅读 · 0 评论 -
bzoj4603 sdoi2016 r2 d2 dice
感觉题目考察的有些偏; 满中国oj都见不到类似的(晚半年的吐槽。。。。) 其实掌握了相关知识还是很裸的;#define rep(i,k,n) for(int i=k;i<=n;i++)#define rep2(i,k,n) for(int i=k;i>=n;i--)using namespace std;typedef double db;const int N=73;const db原创 2016-11-06 23:39:00 · 418 阅读 · 0 评论 -
hnjx2015 hashit
题意: 一个串,资瓷末端插入,删除一个字符,求每次操作后本质不同的子串个数; 题解: “可持久化”后缀自动机裸题,类似按zhi并查集的“可持久化”,复杂度O(N)O(N) 当时考场上的神犇大多是这么A的; 作死写了一发替罪羊树搞的后缀平衡树,代码感觉不长,实际比较长。。。 hash比较版本O(NLog2N)O(NLog^2N)#include<bits/stdc++.h>#define原创 2017-01-25 19:46:08 · 514 阅读 · 0 评论