自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 Codeforces Round #407 (Div. 2) C. Functions again(最大连续子段和)

题目地址:点击打开链接思路:一共就两种情况,要么奇数位为负,要么偶数位的为负。两个分别求下最大连续子段和取较大值就行。#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;ll a[maxn], v[maxn], n;int main(void){ while(c

2017-03-30 16:50:14 411

原创 HDU 5418 Victor and World (状压DP入门)

题目地址:点击打开链接题意:  每个点都可以走多次的TSP问题:有n个点(n思路:  给了很多重边,选最小的留下即可。任意点可能无法直接到达,所以先执行一次floyd,算出任意点对之间可达的最短距离。  (1)先考虑穷举的方法,将2~n个这n-1个数字的所有组合情况都算一遍,复杂度是 15!=1 3076 7436 800

2017-03-30 16:07:13 580

原创 POJ 3041 Asteroids(最小顶点覆盖)

题目地址:点击打开链接题意:给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍,最少要几次。思路:关键是构图,把每行看作X集合中的一个点,每列看作Y集合中的一个点,这样每个障碍的行号列号对应连接XY集合的一条边。现在要用最少点的点覆盖所有的障碍(也就是边),这就变成了最小顶点覆盖问题了。最小顶点数=最大匹配。

2017-03-30 13:26:53 546

原创 Codeforces Round #396 (Div. 2) D. Mahmoud and a Dictionary(带权并查集)

D. Mahmoud and a Dictionarytime limit per test4 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMahmoud wants to write a new di

2017-03-28 23:53:10 377

原创 Codeforces Round #396 (Div. 2) C. Mahmoud and a Message(DP)

C. Mahmoud and a Messagetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMahmoud wrote a message s of lengt

2017-03-28 23:44:55 365

原创 5-13 是否完全二叉搜索树 (30分)

5-13 是否完全二叉搜索树   (30分)将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一

2017-03-24 23:55:54 1094

原创 5-10 排座位 (25分) (floyd传递闭包)

5-10 排座位   (25分)布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(\le≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后

2017-03-24 15:12:20 800

原创 5-12 关于堆的判断 (25分)

将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(\le≤ 1000)

2017-03-24 14:29:13 1129

原创 Codeforces Round #394 (Div. 2) E. Dasha and Puzzle(构造)

题目地址:点击打开链接题意:给你一棵树,问你能不能放在二维坐标系中,边必须平行坐标轴,且边没有交集。思路:什么情况不能放呢,很容易可以想到一个点他有大于四条边时肯定是放不了了。那如果所有点的边数小于等于4,怎么进行放呢,为了不让边相交,我们可以将边按点的遍历降序放,比如第一个点的边放的边长len,第二个点的为len/2,那么即使在同一水平线或

2017-03-23 16:57:49 462

原创 HDU 4786 Fibonacci Tree (最小生成树变形)

题目地址:点击打开链接题意:n个点,m条边,无向图,边有两种,一种价值为1,一种价值为0,问你组成的生成树的价值是否可能是一个素数。思路:对边按价值进行排序,然后按价值从小到大和从打大到小分别求一次生成树,得到一个maxval和minval,只要看下minval到maxval之间有没有素数就可以了。因为这个范围内的值都可以换边进行得到。最小生

2017-03-21 15:21:03 533

原创 POJ 2594 Treasure Exploration (最小路径覆盖+传递闭包(解决可重点))

题目地址:点击打开链接题意:有n个地点,现在给出m条单向道路,问最少放多少人可以覆盖所有点,一个地点可以重复经过。思路:这题和POJ1422很像,但有个关键的差别,1422每个点只能经过一次,而这题可以重复经过。如果只能经过一次,那么直接匈牙利就行,但如果可以经过多次,就需要先利用floyd求解下传递闭包加一些新边再来求解。#in

2017-03-21 00:31:39 403

原创 POJ 3660 Cow Contest (floyd 传递闭包)

题目地址:点击打开链接题意:有n头牛,有强有弱,现在给出m个关系A B(表示A比B强),现在让你求有几头牛的排名是可以确定的。思路:强弱关系是传递的,先求一次传递闭包,再枚举每头牛,若比他强的+比他弱的牛数量为n-1,那么他的名次就是确定的。#include#include#includeusing namespace std;const i

2017-03-21 00:05:34 389

原创 HDU 1704 Rank (floyd传递闭包)

题目地址:点击打开链接题意:有一场比赛,对于n个选手给出m场比赛的结果,结果有传递性,问有多少对选手不能判断他们之间的胜负关系。思路 :floyd求解传递闭包关于传递闭包:点击打开链接#include#include#includeusing namespace std;const int maxn = 505;int link[maxn]

2017-03-20 23:34:49 536

原创 CodeForces - 55D Beautiful numbers(数位dp 离散化)

题目地址:点击打开链接题意:统计某段区间内满足它所有非零数位能整除这个数本身的数的个数。思路:要求这个数能被每一位整除,也就是这个数能被所有位数的最小公倍数整除。2-9的最小公倍数是2520,可知dp[pos][preMod][lcm]需要的开的大小dp[20][2520][2520], 显然是开不下的而且会超时。所以需要想办法优化。 我们可以发现第三维,2-9的最

2017-03-20 20:20:40 632 5

原创 ZOJ 3781 Paint the Grid Reloaded (缩点,bfs)

题目地址:点击打开链接题意:给一个n*m的由X或O构成的图,对一个点操作可以使与它相连通(上下左右)的所有一样颜色的格子翻转颜色(X—>O或O—>X),问给定的矩阵最少操作多少次可以全部变成一样的颜色。思路:因为每次翻转都可以把与该点所在连通块相邻的连通块变成同一颜色,要都变成一种颜色,也就是遍历完最远的那个连通块。现在可以对每个连通块进行缩点,相邻的连通块

2017-03-20 18:47:14 485

原创 ZOJ 3780 Paint the Grid Again(逆推)

题目地址:点击打开链接题意:给一块n*n的格子,每次可以将任意行变成X,或任意列变成O,后操作的将覆盖原先的操作,每行每列只能操作一次。给出最终图形,要求按先后顺序输出操作方法。思路:某一个状态,他要么只有行同为X,要么只有列同为O,一个状态不可能同时某行都为X,某列都回O,因为一定有交点。所以我们倒着来,因为要字典序,所以我们要逆字典序找,找到

2017-03-20 16:50:40 335

原创 蓝桥杯 地宫取宝 (记忆化搜索)

题目地址:点击打开链接思路:记忆化搜索,dp[x][y][curMax][num]记录的是要取(x,y)位置时,拿了num个物品,其中最大价值为curMax的时候的方案数量。注意有个坑点,物品价值可能为0,搜索时我们初始价值为0,但第一个价值为0的物品是可以取的,所以我们读入时讲所有物品价值+1.#include#include#includ

2017-03-19 00:40:36 519

原创 HDU 3193 Find the hotel(RMQ)

题目地址:点击打开链接题意:给你n个旅馆的p(价格)和d(距离值),然后要你输出所有符合条件的旅馆。条件是没有其他任何一个旅馆的p和d同时小于该旅馆的p和d。( 1 思路:一看数据量不是特别大,暴力n^2也许会过。。于是写了发真过了,数据太水吧。正解应该是RMQ预处理(nlogn), 价格区间的最小距离。a[p]=d表示所有价格为p的旅店中最短的距离是d

2017-03-18 20:26:37 487

原创 HDU 5093 Battle ships (最大匹配)

题目地址:点击打开链接题意:给出一个n行m列的图,*代表海域,o代表冰水,#代表冰山,要想在海域中放置船,保证船与船之间不能相互看到,之间只要有山就不能看到,问最多能放多少船。思路:把每个横向“块”看做二部图中的X中的顶点,竖向“块”看做集合中Y的顶点,若两个“块”有公共的顶点海水,于是就连一条边。这样就转换成了没有公共顶点的最大边集,即最大匹配。#in

2017-03-18 17:05:50 389

原创 SDUT 3565 Feed the monkey(DP)

题目地址:点击打开链接题意:给你三种水果的数量和每一个水果不能连续的数量,问有多少中组合方式。思路:记忆化搜索,dp[num1][num2][num3][pre][con],num1 num2 num3表示三种水果剩余数,pre表示上一个放的是哪个水果,con表示上一个水果已经连续放了多少天。代码:#include#include#includeu

2017-03-18 15:48:58 539

原创 POJ 1466 Girls and Boys(最大独立集)

题目地址:点击打开链接题意:有n个学生,一些学生之间存在关系,现在要把学生弄到一个集合,这个集合中的学生两两不能有关系,求这个集合的最大学生数是多少。思路:将每个点拆成两个点,一个当作是男的点,一个当作是女的点了,然后连边。由于关系是相互的,这样就造成了边的重复。也就是边集是刚才的二倍,从而导致了最大匹配变成了二倍。那么答案就是最大独立集=顶点数-最大匹

2017-03-17 16:36:57 517

原创 HDU 2389 Rain on your Parade(Hopcroft-Carp算法模板)

题目地址:点击打开链接题意:有n个人m把伞,在t秒后要下雨,给出每个人和伞的坐标和每个人走路的速度,问你在t秒内最多能有几个人能拿到伞(每把伞只能一个人用)。n,m匈牙利算法的时间复杂度是O(n*E),这题的边的数量达到了3000*3000,所以用匈牙利肯定会T,Hopcroft-Carp的时间复杂度是O(sqrt(n)*E).还没能理解Hopcroft

2017-03-17 15:22:21 566

原创 POJ 3020 Antenna Placement (最小边覆盖)

题目地址:点击打开链接题意:一个矩形中,有N个城市’*’,现在这n个城市都要覆盖无线,若放置一个基站,那么它至多可以覆盖相邻的两个城市。问至少放置多少个基站才能使得所有的城市都覆盖无线?无向二分图的最小路径覆盖 = 顶点数 – 最大二分匹配数/2思路:每两个相邻的星号连一条边,很明显这是一个最小覆盖的问题,但是在构图过程中,匹配是双向的,即 和都算匹配,因此匹配

2017-03-17 14:27:09 630

原创 HDU 2888 Check Corners(二维RMQ模板)

题目地址:点击打开链接题意:给一个n*m的矩阵,下面q的询问,每个询问给出一个子矩阵的左上角和右下角的坐标,要你求出这个子矩阵里面的最大元素,然后输出,并且,这个最大元素和子矩阵的四个角上的元素比较,只要能和其中一个元素相等,就输出yes,否则输出no对模板的理解:摘自点击打开链接一维RMQ的ST算法,是叫一段2^i长度的序列分成两个2^(i-1)的序列然后

2017-03-17 13:09:24 478

原创 51nod 1495中国好区间 && qduoj78 阿尔法狗的难题 (尺取法)

51nod 1495:点击打开链接qduoj 78:点击打开链接官方题解:对于一个数,我们只需要知道它与T的相对大小关系,因此题目可以转化为求存在多少区间大于等于k。假如固定左端点,那么对于一个好区间,那么右端点一定是连续的,若左端点向右移动,那么最近右端点不可能向左移动。因此可以使用双指针来做这题。代码:#include#include#i

2017-03-17 12:02:34 563

原创 POJ 2019 Cornfields(二维RMQ 最值查询模板)

题目地址:点击打开链接题意:给你一个n*n的矩阵,给你一个点矩阵左上角(x, y),其大小为b*b,有q个询问,每次询问求该矩阵内的最大值和最小值的差。思路:这题因为数据和诺所以暴力也可以。RMQ n^2logn预处理O(n)查询也可以:1、一维RMQ可以用来求线性区间最大值问题。那么我们不

2017-03-16 16:51:46 715

原创 POJ 1050 To the Max(dp 最大子矩阵和/最大子段和问题)

题目地址:点击打开链接题意:求最大子矩阵和。思路:我们知道最大子段和可以用DP O(n)时间复杂度解决,现在是求最大子矩阵和,那么我们可以通过枚举行区间,然后把这个行区间的每列的和做成一个数组,求这个数组的最大子段和。就是求出这个行区间中的最大子矩阵(矩阵高为行间距的子矩阵),所以枚举行区间,每次把这个行区间变成最大子段和问题,就可以得到答案。代

2017-03-16 14:17:23 627

原创 POJ 3368 Frequent values(RMQ/线段树区间合并)

题目地址:点击打开链接题意:给定一个数组,其中的元素满足非递减顺序,要求对于一对起点和终点,回答出其中某个元素重复出现的最大次数。思路:由于原数列已经排好序,所以相同的数字一定是在一起的。我们可以O(n)扫描一遍,算出每一个位置上的数字num是从左起第几个num,记为num[i]    如样例,扫描后如下,括号内是num数组值    -1(1)  -

2017-03-16 00:40:53 570

原创 POJ 3264 Balanced Lineup (区间最值 RMQ模板/线段树)

题目地址:点击打开链接区间最值查询,RMQ和线段树都可以。RMQ代码:#include#include#include#includeusing namespace std;const int maxn = 5e4+5;const int maxm = 25;int dpMax[maxn][maxm], dpMin[maxn][maxm], n, m;

2017-03-15 23:29:40 473

转载 RMQ算法

1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j算法。当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里我们暂不介绍。2.RMQ算法对于该问题,最容易想到的解决方案是遍历,复杂度是O(n)。但当数据量

2017-03-15 20:31:49 334

原创 hdu 5700 区间交(树状数组+二分)

题目地址:点击打开链接思路:对左端点进行排序,然后一边更新,一边查询。因为按左端点排序,所以左端点可以作为相交区间的左端点,然后可以根据是否被大于等于k次覆盖二分查找k个区间覆盖的最大的右端点。此时对应的区间就是这个左端点能得到的最大区间。枚举完左端点后得到的就是最大值了。代码:#include#include#include#includeusing

2017-03-14 23:52:41 501

原创 POJ 2182 Lost Cows (树状数组+二分 / 线段树 / 枚举)

给出n和每个数之前比它小的数有几个 需要输出原序列,最后一个数的真实值为a[N]+1将a[N]+1在序列中删去,更新a[i],那么第N-1个数的真实值为a[N-1]+1。做法很多,线段树,树状数组加二分或是枚举都可以。线段树代码:#include#include#includeusing namespace std;const int maxn

2017-03-14 23:38:08 911

原创 HDU 4027 Can you answer these queries? (线段树 区间更新)

题目地址:点击打开链接题意:给定100000个数,两种操作,0 i j表示将i j这段的数字都开根号(向下取整),1 i j表示查询i j之间的所有值的和(所有的和都不超过64位)思路:我们可以很容易的发现,一个数k(k也是1,也就是说当一个数为1的时候,我们没有必要对它进行操作和更新;而且一个很大的数仅仅经过6,7次就可以变成1;所以到这里我们

2017-03-14 22:43:52 399

原创 ZOJ 1610 Count the Colors(线段树 区间覆盖)

题目地址:点击打开链接题意:在一条长度为8000的线段上染色,每次把区间[a,b]染成c颜色。显然,后面染上去的颜色会覆盖掉之前的颜色。求染完之后,每个颜色在线段上有多少个间断的区间。思路:区间问题用线段树,成段的延迟更新区间,最后把所有的区间下压到叶子结点,统计叶子结点的颜色。代码:#include#include#includeusin

2017-03-14 22:36:02 376

原创 2016 EC-Final Problem D. Ice Cream Tower(二分+贪心)

题目地址:点击打开链接题意:有N个冰淇淋球,做一个冰淇淋需要K个球,这K个球还必须满足上下相邻的下面比上面大至少两倍。先给出N个球的质量,问最多能做出多少个冰淇淋?思路:二分可以做的冰淇淋数,贪心验证是否可以堆成,将冰淇淋按从小到大排序,一层一层贪心地堆就可以了,因为这个冰淇淋如果当前不能用上,那么后续更不可能用上。代码:#includeusing n

2017-03-10 23:48:12 1150

转载 C++集合运算函数总结-merge、set_union、set_difference、set_symmetric_difference、set_intersection

C++集合运算函数总结集合A,B。(可以使用数组、list、vector)头文件:#include前提:两个集合已经有序。merge() //归并两个序列,元素总个数不变,只是将两个有序序列归并为一个有序序列。set_union() //实现求集合A,B的并。set_difference()//实现求集合A,B的差(即A—B)set_symmetric_differen

2017-03-09 23:39:17 5198

原创 CodeForces 367B Sereja ans Anagrams (map)

题目地址:点击打开链接题意:给定n个元素的序列a[]和m个元素的序列b[],让你找到一个q使得a[q]、a[q+p]、…a[q+(m-1)*p]构成序列b。问你所有的q。思路:i、i+p、i+2*p肯定构成一条长链,枚举链的起点,用map维护并判断长度为m的链与b序列是否相同。map可以直接用==判断是否相等,涨姿势了代码:#incl

2017-03-09 22:44:44 427

原创 HDU 3709 Balanced Number (数位DP 枚举)

题目地址:点击打开链接思路:首先要分析出,对于某个非 0 的 number,最多可能有一个 pivot 的位置。证明:如果有两个这样的位置,将左边位置移动到右边时,左边的 sigma 一定增大,右边的 sigma 最多保证不减,不可能增大,故不可能再次相等。于是可以枚举这样的位置,然后分类统计求和。然后枚举支点的位置。dfs里的d指的是当前支

2017-03-09 16:51:11 341

原创 UVA 1025 A Spy in the Metro(DP)

题目地址:点击打开链接题意  某城市的地铁有n个车站 编号1到n  有m1辆车向右开 给出m1个从车站1出发的时间  m2辆车向左开  给出m2个从车站n出发的时间  t[i]为火车从第i个车站开到第i+1(或相反)个车站需要的时间   Maria在车站1 她需要恰在时刻T到达第n个车站  求她的最小总车站等待时间思路:dp[i][j]记录的是i时间时在第j个车站到终点需要等待的最少时

2017-03-09 15:38:57 294

原创 hdu 3829 Cat VS Dog(最大独立集)

题目地址:点击打开链接题意:有p个孩子参观动物园,动物园里面有n只猫和m只狗,每个孩子喜欢猫讨厌狗,或者喜欢狗讨厌猫。只有把一个孩子不喜欢的动物移走,喜欢的动物留下,这个孩子才会高兴。 问最多能使多少个孩子高兴。思路: 一开始想着把猫和狗做二分图。。但不知道如何去建图了,而且高兴的孩子数也求不出。正解应该是把喜欢猫的和喜欢狗的分为两个集合作二分图,如果A喜欢B讨厌的

2017-03-08 23:47:56 547

空空如也

空空如也

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

TA关注的人

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