自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GODSPEED

这世界从来就只有强者的奋斗史,而没有弱者的墓志铭

  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDU 4219 Randomization?(树形概率DP)

题意:给出一棵树,每条边等可能的从[1, L]中取值,问这棵树所有点之间的距离都小于等于s的概率。思路:树上的概率DP,用状态dp[i][j]表示以i为根节点的子树中所有点对之间的距离小于s且从i出发的最长距离是j的概率,那么就可以写出状态转移方程,每次dfs将当前的子树与前面的子树的结果合并,并且注意每次合并的两条链的总长不能超过s。#include#include#include

2015-09-25 20:25:53 535

原创 HDU 4253 Two Famous Companies(最小生成树+二分)

题意:就是说有A、B两个公司要修路,有m条路,可能是属于A修的,也可能是属于B修的,现在要求所有路都联通的情况下的最小权值,并且A公司必须要修k条路。思路:一开始看了半天没思路...百度了下发现是一道clj的论文题,思路是用f(x)表示A公司每条路加上x后图中最小生成树中最多含有的A公司的边数。用g(x)表示A公司每条路加上x后图中最小生成树中最少含有的A公司的边数。二分x

2015-09-25 15:08:37 602

原创 HDU 4169 Wealthy Family(树形背包)

题意:给出一棵树和每个节点的权值,从n个结点(n思路:这道题数据量很大,不能直接开二维背包dp,会爆内存,解决方法是开一个全局背包(表示当前状态的子树中的背包值)和一个局部背包(当前状态的背包值),再计算出当前状态的背包值后,用其更新全局背包。虽然这么做可以ac,但是窝还是不会计算这题的时间复杂度,可能因为树的形态比较特殊,只有很少的结点数的状态值能大于k,所以时间复杂度远小于O(n*k*

2015-09-24 20:10:20 501

原创 HDU 1011 Starship Troopers(树形背包)

题意:有n个洞组成一棵树,你有m个士兵,你从1号房间开始攻打,每个洞有a个"bugs"和b的价值。你的一个士兵可以打20个"bugs",为了拿到这个洞的价值b你必须留下k个士兵消灭这个洞的所有"bugs"(k*20>="bugs"的数量,且留下的士兵不可以再去攻打其他的洞,且必须攻打了前面的洞才可以攻打后面的洞)。问你花费这m个士兵可以得到的最大价值是多少。 思路:树形背包基础题,坑点

2015-09-24 15:41:42 385

原创 HDU 4123 Bob’s Race(树形DP+RMQ)

题目大意:给定一棵树,每一个点都从当前位置走到距离最远的位置,1~n的连续区间中最大并且走的最远距离差值不超过Q的区间右多大。思路:首先求出每个点能到达的最远距离,这一步有两种做法:第一种做法是树形DP,两次dfs,第一次求出从每个节点不同儿子节点所能走到最远距离maxlen[0],次远距离maxlen[1],以及走到最远距离时经过的儿子节点maxid。第二次dfs,每个点u能到达

2015-09-24 03:23:20 477

原创 Codeforces Round #321 Kefa and Watch(字符串哈希+线段树)

题意:给出一个数字串,现在有两种操作,操作1将指定区间的字符更改成新数字,操作2询问一个区间内的周期是否为D。思路:字符串哈希+线段树。利用线段树来修改和计算每个子串的哈希值,判断区间[l, R]周期是否为d时只要满足子串[l, r-d]和[l+d, r]是否相等即可,相等周期就是d。#include#include#include#include#include#inclu

2015-09-23 19:42:24 486

原创 Codeforces Round #321 Kefa and Dishes(状压DP)

题意:有n种食物,每种食物有一个愉悦度,现在要从中选择m个食物,使得愉悦度最大,特别的,有K种规则,规定连吃两种食物有愉悦度加成,现在想要求出最大可能的愉悦度。思路:状压DP,状态dp[S][i]表示当前选择的食物集合是S,且最后一个吃的是第i种食物的最大愉悦度,我们就可以得到状态转移方程,dp[(1其中a[i]表示每种食物的愉悦度,G数组表示规则中的愉悦度加成,这样做的时间复杂度为O((

2015-09-23 02:57:12 562

原创 POJ 2763 Housewife Wind(树链剖分)

题意: 知道了一颗有n个节点的树和树上每条边的权值,对应两种操作:      0 x        输出 当前节点到 x节点的最短距离,并移动到 x 节点位置      1 x val   把第 x 条边的权值改为 val。思路:树链剖分基础题,这道题比较坑的地方是卡vector,用vector存边会tle。#include#include#include#include#

2015-09-23 00:17:47 343

原创 HDU 4763 Theme Section(KMP)

题意:给出一个字符串,求出最长的E,使得字符串可以表示成EAEBE的形式,A,B可以为任意字符串。思路:KMP水题,但对理解KMP算法有很大帮助。首先计算出字符串的失配函数f,f[i]的值表示的就是i-1位置结束的字符串和前缀的最大匹配长度,那么我们每次在中间的那块找出长为f[i]的前缀,如果能找到,就是答案,否则回溯到f[f[i]]。#include#include#includ

2015-09-22 19:22:07 389

原创 HDU 4685 Prince and Princess(最大匹配+强连通分量)

题意:n个王子和m个公主,王子只能和他喜欢的公主结婚,公主可以和所有的王子结婚,输出所有王子可能的结婚对象。思路:这道题是poj 1904的强化班 POJ1904传送门之所以说是强化,主要是因为这样几点:首先王子和公主的数目不同,这就导致了有一些王子无法和公主结婚,其次POJ那道题给出了一个完美匹配,而这道题并没有给出。解决方法,我们可以把这个图先构造出一个完美匹配,具体方法是先求出这

2015-09-22 10:07:49 558

原创 POJ 1904 King's Quest(强连通分量+匹配)

题意:有n个王子,每个王子都有k个喜欢的公主,每个王子只能和喜欢的公主结婚,巫师给出一个匹配表,每个王子都和一个公主结婚,但是国王不满意,他要求巫师给他另一个表,每个王子可以和几个公主结婚,按序号升序输出公主的编号,这个表应满足所有的王子最终都有公主和他结婚。思路:很好的一道题,把匹配和连通图结合起来了。把每个王子的目标公主当做一个点,向王子喜欢的其他公主连一条有向边,然后求出这个

2015-09-22 00:21:00 562

原创 HDU 4635 Strongly connected(强连通分量+缩点)

题意:给出一个简单有向图,问最多添加多少边使得这个图连通并且不强连通。思路:考虑这样一个问题,要使得这个图不强连通并且边数最多那么最后一定是将这个图这个图分为两个强连通分量且这两个子图都是完全图,并且这两个强连通分量中任意两点都有且只有一条有向边,假设这两个强连通分量中各有a,b个结点,那么答案就是n*(n-1)-a*b,那么我们只需要将这个图分为两个强连通分量且这两个强连通分量中结点

2015-09-21 20:50:43 427

原创 HDU 4612 Warm up(边双连通分量+树的直径)

题意:给出一个无向图,可能包含重边和自环,现在可以在这个图上加上一条边,问加完这条边后图上最少有多少桥边。思路:首先求出所有边双连通分量,然后缩点,缩点以后形成了一棵树,那么只要我们将树上最长的一条链变成一个环,那么肯定可以减少最多的桥边,问题就变成了求出边双连通分量,这道题一开始一直wa,因为没考虑清楚重边的影响,将tarjan里的判断当前点是否是父亲结点改成判断当前边是否是从父亲结点连过来

2015-09-21 18:24:52 654

原创 ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 1007 Boxs(状态压缩+搜索)

思路:状态压缩,状态表示每个盘子所在的位置,每个盘子的位置用三位二进制表示,总共的状态为2^21,因为每次盘子只能向左放或者向右放,那么我们从结束的位置开始搜索,bfs预处理出目标状态到所有状态所需要的最小步数,然后对于每个询问O(1)回答即可。#include#include#include#include#include#include#include#include#in

2015-09-21 01:39:25 1123 2

原创 HDU 5452 Minimum Cut(LCA+树形DP)

题意:给一个简单无向图,并给图上的一个最小生成树,问最少去除多少边使得该图不连通,去掉的边中有且仅能有一条是生成树上的边。思路:首先考虑枚举树上的每条边,假设一条树边所连的两个节点为u,v(u为深度较小的点,v为深度较大的点),那么这条树边所在的最小割边集等于以v为根节点的子树向子树外的点连的边的数量加1,于是我们可以考虑用树形DP来做,以结点R为根节点的子树向外连的边数等于它所有子树

2015-09-21 01:26:54 601

原创 《Orange's 一个操作系统的实现》学习笔记(一) 实验环境搭建

《Orange's 一个操作系统的实现》学习笔记

2015-09-20 22:17:00 4814 1

原创 POJ 1160 Post Office(四边形不等式优化DP)

题意:在村庄内建邮局,要使村庄到邮局的距离和最小。思路:用w[i][j]表示i到j之间建一个邮局的最小花费,那么可以得到状态转移方程dp[i][j] = min(dp[i-1][k]+w[k+1][j])其中dp[i][j]表示前j个村庄建i的邮局的最小花费,那么用O(n*n)预处理w数组,然后四边形不等式优化DP就可以做到O(n*n)的复杂度。#include#include#i

2015-09-18 22:54:46 638

原创 HDU 2829 Lawrence(斜率DP)

题意:给n(1思路:设sv[i][j]为区间[i,j]之间的价值,那么我们可以得到一个状态转移方程dp[i][j] = min(d[i-1][k]+sv[k+1][j]),dp[i][j]表示前j个数放i个间隔的最小值,可以发现如果不优化的话时间复杂度为O(n*n*n)无法承受,我们要优化首先要把sv[k+1][j]转化成一个包含k和包含j和包含jk的多项式的乘积,可以发现

2015-09-18 15:05:52 453

原创 HDU 3507 Print Article(斜率优化DP)

题意:给出n,m,求在n个数中分成任意段,每段的花销是(sigma(a[l],a[r])+m)^2,求这个最小值。思路:首先可以推出dp的状态转移方程,dp[i]=min((sum[i]-sum[j])^2+m+dp[j]),如果没有优化的话那么O(n*n)的复杂度必爆,我们可以用斜率优化来做这道题,维护一个斜率单调递增的下凸函数,要注意的是判定入队和出队的地方是小于等于而不是小于,小于会

2015-09-17 20:56:27 484

原创 SPOJ 7001 Visible Lattice Points (莫比乌斯反演)

题意:给定n*n*n的立方体,问从(0,0,0)点处能看到多少点,一个点能被看到当且仅当它与原点之间的连线上没有其他点。思路:假设一个点(x,y,z)能被看到,那么gcd(x,y,z)一定为1,这是因为如果这三者有公因数,那么除以公因数后的这个点一定在它与原点之间的连线上,所以我们要求的等价于(0,n)中任取三点(可以相等),且这三者的gcd为1的点的数量。这个问题就很类似经典莫比

2015-09-16 19:56:43 428

原创 SPOJ 4491 Primes in GCD Table(莫比乌斯反演)

题意:求[1,m]和[1,n]中gcd为素数的数对数量。思路:这道题和hdu 4746有点像 传送门:http://blog.csdn.net/u014664226/article/details/48495375思路大致相同,处理出每一项的系数,然后求前缀和分段加速。#include#include#include#include#include#include#in

2015-09-16 17:30:11 439

原创 HDU 4746 Mophues(莫比乌斯反演)

题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数思路:不难看出可以看出p最多不超过19.首先考虑这个问题的简化版,求gcd(a,b)小于等于d的数对的数量。对于这个问题,由莫比乌斯反演我们可以求出gcd为i的数对数量然后从1到j累加起来,但是d太大的话时间复杂度无法承受。但是我们注意到,对于每个gcd = i,设A(d):gcd(a, b)=d的有多少

2015-09-16 16:28:34 770

原创 BZOJ 2301 Problem b(莫比乌斯反演+容斥)

题意:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。思路:莫比乌斯反演,类似于hdu 1695,加上一个小容斥即可。这道题卡时间卡的简直心痛........一个优化是将处理mu的前缀和将相邻的a/i和b/i值相同的项合并起来这样的话时间可以从50s降到10s.......

2015-09-16 02:55:29 607 2

原创 HDU 1695 GCD(莫比乌斯反演)

题意:给定两个数和,其中,,求为质数的有多少对?其中和的范围是。思路:莫比乌斯反演。莫比乌斯反演一般有两种形式,一般书里介绍的是第一种,自己总结了一下,一般来说,f函数是一个很不好求的东西,F函数是一个相对好求的东西,我们通过莫比乌斯反演,将求f函数转化为求F函数的和,一般这样做可以大大加速计算过程。回到这道题,用f(i)表示gcd为i的数对有多少,用F(i)表示gcd为i

2015-09-16 00:59:10 872

原创 HDU 4418 Time travel(高斯消元+概率DP)

  题意:一个人在数轴上来回走,以pi的概率走i步i∈[1, m],给定n(数轴长度),m,e(终点),s(起点),d(方向),求从s走到e经过的点数期望。  思路:先把n(n>1)个点展开成2*n-2个点,这一步的作用是简化方向这个状态,使得现在所有点在一条直线上,例如原来是01234321,现在展开成了01234567.设dp[i]为当前在i点走到目标点的期望步数,根据状态转移

2015-09-15 20:34:17 597

原创 POJ 2096 Collecting Bugs(概率DP)

题意:有s个系统,有n种bug,bug的数量不限,一位程序员每天可以发现一个bug,现在求发现n种bug存在s个系统中并且每个系统都要被发现bug的平均天数(期望)。思路:概率DP水题,用DP[i][j]表示已经有i种bug和j种系统后还需要达到目标状态的期望,那么答案就是dp[0][0].#include#include#include#include#include#

2015-09-15 14:14:37 345

原创 ZOJ 3329 One Person Game(概率DP+迭代)

题意:有三个骰子,分别有k1,k2,k3个面。每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和。.当分数大于n时结束。求游戏的期望步数。初始分数为0 。思路:首先不难想到用dp[i]表示当前步数为i还需要到达目标状态所需要步数的期望,那么我们可以得到状态转移方程dp(i) = sigma(p[k]*dp(i+k))+dp[0]*p0 + 1.其中p[

2015-09-14 23:18:49 416

原创 SGU 495 Kids and Prizes(概率)

题意:n个盒子里装有礼物,m个人随机选择礼物,选完之后空盒子放回问选中的礼物数的期望。思路:一开始想成了二维状态n*m的DP,但这样肯定不对,其实这是很简单的一道概率论的题这n个盒子是等价的,所以我们只需要求出每个盒子的期望然后乘以n即可,每个盒子的期望等于它被选中的概率,这个概率就相当好求了,就是((n-1)/n)^m#include#include#include#i

2015-09-14 18:12:06 436

原创 CodeForces 148D Bag of mice(概率DP )

题意:原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠。谁先抓到白色老鼠谁就赢。 王妃每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。 每次抓老鼠和跑出来的老鼠都是随机的。 如果两个人都没有抓到白色老鼠则龙赢。王妃先抓。 问王妃赢的概率。 思路:用dp[i][j]表示剩下i只白鼠和j只黑鼠时公主赢的概率,那么我们可以得到状态转移方程首先,如果在这种状态下公主直接

2015-09-14 09:52:24 378

原创 POJ 3071 Football(概率DP)

题意:有2^n支队,每次相邻的两支队打比赛,问最后哪支队夺冠的概率最大。思路:用dp[i][j]表示第i轮第j支队获胜的概率,那么我们可以得到状态转移方程dp[i][j]=sigma(dp[i-1][j]*dp[i-1][k]*p[j][k]),但要注意到在第i轮j并不是和剩下每个队都可以进行比赛,他只可以和与他左或右相邻的(2^(i-1))支队伍打比赛,那么我们在转移时计算出这个区间就可

2015-09-13 22:27:56 344

原创 ZOJ - 3822 Domination (概率DP)

题意:有一个棋盘,每天向一个格子中填放石子,当每行每列都有石子时停止,求天数的期望。思路:用dp[i][j][k] (j*k != n*m)表示用i个石子占据j行k列的概率,那么我们就可以得到四个转移方程,但这并不完全是我们想要的,因为我们要的概率是用i个石子“第一次”所有行列都占据的概率,我们直接用dp[i][n][m]表示所要求的概率,那么只要由dp[i][n][m]到达不

2015-09-13 20:14:20 458

原创 HDU 5446 Unknown Treasure(Lucas定理+中国剩余定理)

题意:给一个组合数C(n, m) (n, m思路:先用lucas定理求出组合数模除每个质因子的解,然后用中国剩余定理来进行求解,要注意两个long long类型相乘可能会爆,要把乘法改成加法的形式。#include #include #include using namespace std;typedef long long LL;typedef long long lint;

2015-09-13 16:44:39 405

原创 ZOJ 3820 Building Fire Stations(二分+BFS)

题意:给定一棵树,希望选取两个结点做消防站,使得其余的节点到达消防站的距离最大值最小。思路:二分这个距离,以任意一个节点为根dfs,找到距离最远的那个点,然后从这个点往上走len个长度,找到当前的这个点,然后在bfs一次找到最远的那个点然后再bfs一次......不过貌似有更优美的做法没仔细研究,dfs会爆栈所以用bfs。#include#include#include#in

2015-09-13 00:48:00 429

原创 BZOJ 1492 Cash(CDQ分治论文题)

CDQ分治论文题#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-9#define LL long long#define pii pair//#pragma

2015-09-12 02:11:38 873

原创 POJ 3113 Manhattan Wiring(插头DP)

题意:求连接两个2和两个3的路径之和最小,输出和-2,不存在就输出0,输入0表示可以走,1表示不可以走。思路:用状态2和3表示插头是在路线2还是路线3上,0表示无插头。#include#include#include#include#include#include#include#include#include#include#include#include#inc

2015-09-10 21:29:35 450

原创 ZOJ 3213 Beautiful Meadow(插头DP)

题意:在一个棋盘模型上求最大权值的路径,路径的起点和终点可以任意选定。思路:相比于普通的回路DP,增加一个状态表示独立插头,即起点和终点,这道题分的情况比较多。默默吐槽...代码量5000b写4个小时调试4个小时,分类讨论简直恶心到吐.....一不小心就wa了.......#include#include#include#include#include#include#in

2015-09-10 00:46:22 461

原创 ural 1519 Formula 1(轮廓线|插头DP|括号配对)

题意:给你一个m * n的棋盘,有的格子是障碍,问共有多少条回路使得经过每个非障碍格子恰好一次.m, n ≤ 12。如图,m = n = 4,(1, 1), (1, 2)是障碍,共有2条满足要求的回路.Formula 1" alt="【动态规划】Ural1519 Formula 1" src="http://s4.sinaimg.cn/bmiddle/51cea404x7abee2b588

2015-09-09 05:02:11 1168

原创 POJ 2447 RSA(大整数分解质因数+逆元)

题意:已知RSA的加密过程,balabala.....(其实就是主要就是让你求一个大整数分解的结果)。思路:这道题可以用 POJ  1811 的做法,把正整数n分解,时间复杂度大约为O(n^(1/4)).传送门:剩下要做的就是用扩展欧几里得算法求逆元,然后求一个快速幂就可以了。这道题这种做法跑得还是很快的,大约250ms左右。#include#include#include

2015-09-08 19:40:26 3257

原创 POJ 1811 Prime Test(大素数判断+大合数素因子分解)

题意:判断n(n思路:这题肯定不能用普通的枚举来做,对于判断大素数,可以用Miller_Rabin随机算法进行素性检验,而分解素因数可以使用Miller_Rabin搭配Pollard_rho算法进行分解,Miller_Rabin算法出错的概率小于2^(-s),s为测试的数据个数,如果不放心的话可以多试几组,在实际应用中是一种很好的随机化算法,Pollard_rho算法理论复杂度在O(n^(

2015-09-08 18:17:04 1649

原创 POJ 1061 青蛙的约会(数论水题+求解模方程+扩展欧几里得算法)

题意:对于模方程( n-m ) * t = ( x-y ) %  L, 求t。思路:数论水题,扩展欧几里得求一下然后注意对 L/gcd取模即可。#include#define LL long longusing namespace std;//求解模方程(n-m)*t =(x-y)% L int x, y, L, m, n; void gcd(LL a, LL b, LL& d,

2015-09-07 23:53:39 552

百鸡问题详解

c语言实验题中的百鸡问题对理解c语言很有帮助多看无害

2014-04-11

空空如也

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

TA关注的人

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