自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

便纵有千种风情

更与何人说

  • 博客(27)
  • 收藏
  • 关注

原创 2014 AnShan Coprime (hdu 5072) 容斥原理

CoprimeTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 2407    Accepted Submission(s): 916Problem DescriptionThere are n peopl

2016-09-30 21:24:04 293

原创 2014 xi'an Problem F. Color (Gym 100548F) 容斥原理

题意:给出n个需要涂色的格子排成一列,有m种颜色,需要从中选出k种颜色,使得任意两个相邻格子不同色。(n\m解法:容斥原理,首先能想到计算C(m,k),之后考虑的问题是现在用恰好k种颜色去涂色。首先k*pow(k-1,n)表示的是至多用k种颜色的种数,然后如果想得到恰好用k种颜色的方案数,就用容斥原理,奇加偶减。#include#include

2016-09-30 13:36:26 519

原创 2014 xi'an K Last Defence Gym 100548K

#include#include#include#include#include#include#includeusing namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for

2016-09-30 08:06:52 415

原创 hdu 5074 Hatsune Miku 简单dp

题意:给出m*m的分值表和一个序列(其中有些位置待填),求总分值的最大值。总分值=序列中相邻元素的分值之和。解法:dp[i][x]表示考虑了前i个序列且最后一个为x的最优值。代码:#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#inc

2016-09-29 14:22:56 368

原创 CF 518 D. Ilya and Escalator 概率dp

链接题意:有n个人,每秒有p的概率有一个人进电梯,问t秒后电梯里的人数的期望。###解法: 因为有人数上限,所以要使用二维记录当前时间和人数。之后根据概率进行状态转移。注意每个阶段概率和为1,编程上更新后继状态更简单。#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#in

2016-09-29 13:32:10 427

原创 CF 567C. Geometric Progression

题目链接题意:给出一个序列,求公比为k,且长度为3的子等比序列个数。(1 ≤ n, k ≤ 2e5)( - 1e9 ≤ ai ≤ 1e9) #解法: dp[0][x]表示当前x的数量。 dp[1][x]表示当前以值x结尾,长度为2且公比为K的等比数列数量。代码:#include<cstring>#include<iostream>#include<map>using namespace

2016-09-24 09:59:43 536

原创 hdu 4118 Holiday's Accommodation 思维+树形dp

题目链接题意:给出一棵树(n<=1e5),边具有权值。现在每个城市中有一个人出发去另一座城市,不同人的目的不能相同。问路径和的最大值。解法:如果直接从子结构和问题上着手不好考虑。但是多分析机组数据会发现:对于任意一条边,将n个点划分为n1、n2两部分。为了使路径和尽可能大,那么两部分尽可能进行更多的交换,那么令m=min(n1,n2),这条边会经过2*m次。代码:#include<cstdio>#

2016-09-23 23:18:52 398

原创 CF 559C. Gerald and Giant Chess 组合数学+DP

题目链接题意:给出一个h*w的棋盘(h,w<=1e5),其中有n个位置不能走(n<=2000),现在要从左上角走到右下角,每步只能向下或者向右走一步。问有多少种走法?右下角保证可以走到。解法:对于右走x步,下走y步的无限制方案数是C(x+y,y),可以记为C(x,y)。 首先将最右下角也作为一个不能走的位置,最后要求出到达这个位置的合法路径数dp[n]。 对所有不能走的位置排序,先比较行,再

2016-09-22 10:02:25 750

原创 hdu 5117 Fluorescent 数学展开式+dp

题目题意:给出一些个开关(m<=50),每个开关控制一些灯(一共有n个灯<=50),一旦按了开关,它所控制的灯都会切换一次状态,最开始所有灯都是灭的。现在每个开关最多按一次,求2m2^m种情况下的E[x3]E[x^3],x为点亮的灯数。解:求E[x3]E[x^3],其中x=x1+x2+x3x=x1+x2+x3, 则x3=(x1+x2+x3+...+xn)∗(x1+x2+x3+...+xn)∗(x1

2016-09-21 16:33:30 456

原创 hdu 5120 Intersection 两环面积交

IntersectionTime Limit: 4000/4000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others)Total Submission(s): 2499    Accepted Submission(s): 929Problem DescriptionMatt is a bi

2016-09-21 14:05:42 299

原创 CF 173C. Spiral Maximum 预处理

C. Spiral Maximumtime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputLet's consider a k × k square, divided in

2016-09-20 17:07:49 321

原创 uvaLive 3026 - Period 水KMP循环结

题目题意:给出一个字符串,找所有能表示成K*T的位置(K>1),并给出相应的T。n≤1000000n≤ 1000000解:第i个位置的最短循环结长度为 i+1-nex[i+1]…#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#incl

2016-09-19 21:59:43 352

原创 uvaLive 3942 Remember the Word 字典树

题目题意:给出一个充满单词的字典,单词长度(<=100),个数(<=4000),再给出一个字符串,长度(<=300 000),问该字符串有多少种拆分单词的方法。解:很容想到一维dp,但是类似朴素LIS的转移时间不够,但是这题有个弱点就是单词的长度有限。 本来我想的dp转移是当前状态找前驱状态,不过这样字典树中的字符串需要逆序插入,不方便。所以书上的做法是更新后继状态的那种。#include<cst

2016-09-19 21:33:41 277

原创 poj 1151 Atlantis 线段树扫描线

题目题意:给出一些矩形,求面积的并。解法:扫描线,每个矩形对应两个竖直的线段,左边的线段标记为1代表添加,右边的线段标记为-1,代表减。现在从左往右扫描。计算每次从一个条直线段到另一条线段中间的面积(线段树维护的总长度*两线段横坐标之差)。 需要离散化, 线段树中叶子结点维护的区间左右坐标之差为1(离散后),每个结点还要记录当前段的标记,如果是0,那么当前段len为0,否则当前段len=lson.

2016-09-19 13:20:53 331

原创 hdu 5894 hannnnah_j’s Biological Test 排列组合

题目题意:现在 m个考生人需要坐在有n个座位的圆桌上。你需要安排位置,使得任意两个考生之间相距至少k个位置。桌子有编号,考生a和b交换位置视作一种方案,问有多少方案,mod 1e9+7。(0 < m < n < 1e6, 0 < k < 1000)解法:首先必须有n>=m+k*m,否则答案是0。现在先考虑m个人的相对关系(即不考虑座位编号和人对应,先只考虑人与人间的间隔,即位置分配), 先在n个

2016-09-18 21:35:44 600

原创 hdu 5900 QSC and Master 区间dp

题目题意:给出n(n<=300)个pair:<key,value><key,value> 如果相邻两个pair的key不互素,那么可以将这两个pair拿取,得分加上两个value。 问最大得分。解:很显然就是区间dp,一开始我认为就是枚举一个区间中最后拿去的两个相邻pair就完了,wa一发后,发现不对: 最后拿去的两个pair不一定相邻,所以如果[le,ri]中le和k配对,那么[le,k]

2016-09-18 20:22:15 517

原创 hdu 5886 Tower Defence 树形期望dp 雪漫防守战

题意:风暴斗篷现在要攻打雪漫城。雪漫城有n(n≤100000)个哨塔防守,哨塔之间有n-1条路相连,(构成一棵树)。现在预测到风暴斗篷要进攻某一条路,然后这棵树就一分为二,现在要得到分开后的最长路。 图留斯将军假定进攻所有路的概率相等,问最长路的期望*(n-1)。 分析:这就是一个树形dp,和期望没什么关系。求的就是n-1种划分后的最长路之和。对于一个结点x,无非要求两个东西,以它作为根的子树中的

2016-09-17 21:22:38 984

原创 hdu 5890 Eighty seven 背包bitset

题意:给出n(n<=50)个数,然后有Q(Q<=1e5)个查询,每次查询相互独立,内容是:抽走1到3个数,然后问剩下的数中,能否有10个数凑成87。解法:学别人写的bitset去优化背包,原来还STL还有bitset这个东西。 比赛的时候想优化结果想错了,比赛的时候认为就是先进行背包,然后 等价于求dp[87+sumV][10+cnt] 反例是 4 4 3 6 ,4+4+3=11,

2016-09-17 21:12:22 593

原创 CF 712C. Memory and De-Evolution 贪心

题目题意:给出一个正三角形要求变为另一个边长较小的正三角形。 要求变化过程中,每一步改变一条边长度,并且使之变为边为整数的三角形。问最小步数。解法:当初直观认为,每个只需要将最长的边,变得尽量短即可,结果样例都过不了。因为如果变得太短比如(22,22,22)->(22,22,1) 下一步变化的效果就很差 逆向考虑,给定终边,倒推,每次使最小边尽可能变大。#include<string>#in

2016-09-12 22:50:49 362

原创 hdu 5876 Sparse Graph 补图单源最短路

题目题意:给出n个点(n<=200000),m(m<=20000)条边的图,求补图单源最短路。解法:按照正常的做法,补图的边数太多会超时。有一个性质是,如果当前拓展点x和某些未拓展的点y没有边相连,那么这些未访问的点y的d[y]=d[x]+1,将这个d再放入队列,依次进行。整个·过程需要维护一个集合,存放尚未拓展的点。代码:#include<cstdio>#include<string>#inc

2016-09-12 12:44:54 320

原创 hdu 5874 Friends and Enemies

题目题意:某座岛上 有m个人,有n种颜色的珠子。现在每个人必须要带上一个项链。人与人之间要么是朋友要么是敌人。 如果是朋友,那么他们的项链必须有至少一个相同颜色的珠子,否则他们的项链不能有任何一个相同颜色的珠子。解:现在需要知道最多需要种多少颜色的珠子才能解决问题。 假设一开始所有人的项链上都没有珠子,那么当前答案是0,所有人互为敌人。 由于朋友关系,会使答案增加,现在开始考虑某一个人的朋友关

2016-09-11 22:08:52 362

原创 hdu 1496 QQpet exploratory park 水概率dp

题目犯了个语言的错误: C语言中”%%”会输出一个”%” ,我在本地用1个”%”还是输出了”%”。代码:#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#

2016-09-10 23:44:15 426

原创 CF 708C. Centroids 树形dp

题目题意:给出一棵树(n<=4e5),可以有一次机会:删除一条边,然后添加一条边,使之仍然是树。 现在对于每个点,最多有一次机会,是否可以保证与它相连的子树大小不超过n/2。(删掉这个点后,所有连通分量的结点数<=n/2)解法:1.删去任一结点x,最多只会有一棵树的size>=n/2 2.对于这棵树的补救措施就是将其中一部分移到别处。 3.只能是一部分,因为全部移到别处更加不能满足要求。 4

2016-09-08 12:20:22 867

原创 CF 533 B. Work Group 树形dp

题目链接题意:给出一棵树(n<=2e5),每个点有权值,要求选出权值和尽可能大的点集,使每个点都能有偶数个后代结点被选进去(可以为0)。对于结点x,先处理子结点y1…yn初始化 dp[x][0]=0,dp[x][1]=-inf;dp[x][1]=max{ dp[x][0]+dp[yi][1],dp[x][1]+dp[yi][0] }; dp[x][0]=max{ dp[x][1]+

2016-09-07 18:03:04 421

原创 CF 540D. Bad Luck Island 概率dp

题目链接题意:一座岛上有三个物种,石头,剪刀和布,数量分别是R,S,R(均小于等于100),每天会有两个生物相遇,如果相克,会死掉一个生物。 问最后只剩下某个物种的概率是多少?分别输出只剩下石头、剪刀和布的三个值。对于dp[r][s][p],无非两种情况,一是两个生物,相互克制,转移到子状态。否则,转移到自己。两种情况的概率比较好计算。比如说Rock与scissors相遇的概率为 r*s/C(r

2016-09-07 13:10:14 439

原创 POJ 3156 Interconnect 并查集+期望dp

题意:有n个城市,m条边。现在每一年随机选两个不同的城市,然后建一条边。问多少年后所有城市连通?输出期望值。解:先用并查集处理出有多少个连通块。 状态的表示是每个连通块中点的数目。 如果某一年选的两个点属于同一连通块,就是转移到了自己。 否则就是转移到了另一个状态。移项解方程即可。 就是状态表示用了哈希表,略微复杂点。#include<cstdio>#include<string>

2016-09-05 12:40:14 428

原创 poj 3028 Shoot-out 概率dp ★★

题意:n个枪手站在一起,轮流射击,每次只能射一发,且只能射自己以外的人,命中即死。每个人每次射击都有一个命中率。游戏到剩下最后一个人存活结束。每个人每次射击会用最优决策(决策后,自己存活率最高),如果有多个最优决策,随机。问n(n<=13)个人存活的概率。:状态的表示是[i][S][j]表示当前存活的状态S,i表示当前该谁射击,j表示此时j的胜率。状态转移存在环,[i][S]这个状态可能多次转移回到

2016-09-05 12:33:50 702

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除