自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 nyoj 247

题意:从1-n的一条路径中,找出两点,使得两点权值之差最大。n个点不一定要都经过。解题思路:这道题实际可以转化为找出可达的两点a,b,使得a和b两点的权值之差最大。。。这道题确实很难想到是转化为最短路的模型,我开始还是按照论坛里面说的,先求强连通分量、缩点,最后再搜索,结果挂了。。假设最后的结果是a-b,那么我们肯定要保证a>b,否则根据题意就无意义。并且我们还应该要有b->a,即

2016-02-29 20:15:54 268

原创 poj 1604

题意:计算n!最后一位不为0的数解题思路:1*2*3*......*n,每次乘完一个数后,把末尾0去掉,然后模上一个数,这样算出来的数肯定是最后一位不为0的数。。注意这里模的数不能太小,同时也不能太大,太小可能会影响乘积的效果,譬如可能出现0的情况被之前的模运算给抹掉了,太大就直接溢出了。。。参考了别人的,模取100000#include#include#inc

2016-02-25 21:57:57 1053

原创 poj 2346(DP)

题意:n位数,满足前n/2个数字之和同后n/2个数字之和相同的数一共有多少个?解题思路:dp[i][j]表示前i个数的和为j时,有多少个;递推关系:dp[i][j] += dp[i-1][k], k表示前i-1个数的和,由于每一位只能是0-9,所以有限制条件:9 >= j - k >=0由于对称性,只需要枚举到n/2即可,剩下的就是简单的乘法原理。#

2016-02-25 19:15:45 361

原创 poj 1948(搜索+剪枝)

解题思路:这道题看到数据量,想到应该搜索+剪枝应该可以过。。可是别人的A了,我的却超时了。。。我用了一个mark[a][b],表示前两条边长度分别为a和b时,是否已经处理过,如果是的话就直接跳出。。。剩下的就是一个比较简单的搜索过程了,代码不难写,但是确实超时不可避免。。#include#include#include#include#includeusing names

2016-02-25 14:33:06 297

原创 poj 1935(搜索+回溯)

解题思路: 先我们考虑从源点出发到所有自己想要经过的点然后在回到源点sum,显然每条边都必须经过源点(这个我们可以一次dfs求出),但题目的意思是可以不用回到源点,那么我们可以再求源点到所有要经过的点的最远距离ans,于是答案便是sum-ans.这道题的思路确实是很巧妙,一开始我还是在想如何表示从某一点回来的状态,数据太大用状态压缩肯定不行,结果就没思路了,看了别人的思路确实是抓住了这

2016-02-24 16:46:29 786

原创 poj 2078(搜索+剪枝)

解题思路:可以一行一行地递归求解,要是不符合条件就回溯,注意最后一行不能够移动它,因为可能会与之前重叠。。#include#include#includeusing namespace std;const int maxn = 8;int n,mat[maxn][maxn],ans;int get_max(int dep){ int m = 0, s

2016-02-24 15:25:55 646

原创 poj 2415(BFS)

题意: 有一种游戏,共有三个piece(不妨称为棋子),棋盘是由N个点构成的完全图,边有颜色。每次可以移动一个棋子,移动时必须满足棋子走过的边的颜色和其他两个棋子之间的连边的颜色一致。求把三个棋子移到同一个顶点的最少次数。这道题是一个很简单的BFS,但为何一直TLE。。。。#include#include#include#includeusing names

2016-02-24 11:55:35 351 1

原创 poj 1324(BFS+状态压缩)

解题思路:这道题一开始的想法就是状态压缩,即考虑如何判重,由于蛇并非是直线的,所以想到了以每一个点的上下左右共四个值来表示相对位置。最开始想如何用四进制来表示它,无语。。。。。还是题目做少了,直接用两位来表示一个点即可(两位的二进制数可以表示0-3)。剩下的关键就是判断蛇头会不会与蛇尾发生碰撞,详细的就看代码吧。。整体的思路还是比较简单,但是代码很复杂,一般这种复杂点的搜索题代码都挺长

2016-02-23 20:26:10 561

原创 poj 1054

解题思路:这道题其实比较简单,就是找斜率相同且间距相同的点。首先,就是要找到两点,确定好斜率,然后就判断这两点是否在起始位置。其次,确定好斜率就确定了两个点之间的距离,如果某两点之间的间距不满足的话,那么这个点肯定不是这个方向上的。#include#include#include#includeconst int maxn = 5005;struct node{

2016-02-23 14:59:32 383

原创 hdu 1698(线段树区间更新)

解题思路:线段树区间更新水题。#include#include#includeusing namespace std;const int maxn = 100005;struct seg{ int l,r,sum,lazy;}tree[maxn<<2];void build(int l,int r,int u){ tree[u].l = l; tree[u]

2016-02-22 14:53:31 230

原创 hdu 2795(线段树)

解题思路:这道题很难想到是用线段树,确实转化的很巧妙实际上,我们只需要利用线段树(记录1-h)维护哪个位置的剩余空间最大即可,即1,2,......,h是线段树的叶子节点,我们每次要找的就是叶子节点的剩余空间的最大值,只要能够想到这里就很容易啦。。另外如果h>n的话,就令h=n,否则就是类似于位置多而要贴上去的砖少,这样就不合题目意思了。。#include#include

2016-02-22 09:51:39 310

原创 hdu 3577(线段树区间更新)

题意:输入一个t,表示有t组测试数据;          接下来一行,输入两个数,k,m,其中k表示这个辆车最多可以坐这么多人,m表示有m次询问能否上车;          每一次询问,输入两个数a,b,表示该乘客能否在a站台上车,b站台下车,乘车区间为(a,b--),先后次序;          即我每次询问,你就判断在a站台处将会有多少人还在车上,小于k则表示能够上车,更新

2016-02-21 19:49:01 713

原创 hihocoder #1078 : 线段树的区间修改

解题思路:基础的线段树区间修改我按照书上敲的代码不知道为什么WA。。。#include#include#includeusing namespace std;const int maxn = 1e5;int n,q,l,r,_sum;int setv[maxn<<2],sum[maxn<<2];void maintain(int o,int L,int R

2016-02-20 20:25:52 517

原创 poj 2010(优先队列)

题意: 奶牛大学:奶大招生,从C头奶牛中招收N头。它们分别得分score_i,需要资助学费aid_i。希望新生所需资助不超过F,同时得分中位数最高。求此中位数。解题思路:这里要求最大中位数,中位数肯定是在这些人中间,故可以枚举中位数,可以先对分数进行排序,然后用二分去找最大中位数。每次枚举的中位数应该要检验是否满足题意:这里有一个check函数,它的返回值含义如下:-1

2016-02-20 11:55:42 331

原创 poj 1988(并查集)

题意:进行m次操作,M x y 将包含x的集合移动到y上面,C x, 计算x下面有几个元素。解题思路:这道题很容易想到用并查集,但是这里有点绕;最开始我想到的是建立一个num[x],表示x以下的节点数,但这样会有一个问题,要更新num[x]时,必须要枚举哪些节点的父节点为p,由于节点数太多,所以TLE是难免的。。。。这里有一个好办法:在算x以下节点数时,可以用x所在

2016-02-20 10:05:07 259

原创 poj 1634

题意:一个员工A的直接上司是那些薪水大于A,并且身高>=A的人中薪水最少的一个。主席CEO的薪水最高,且身高也是最高的。有多组数据。每组数据给出m个员工,和q个询问。每个员工有id、薪水、身高。对于每个询问,给出某个id,让你求该员工的直接上司的id和该员工的下属的个数。若该员工是CEO,则他的上司的id为0。解题思路:这道题目很简单,就是先按薪水排

2016-02-19 17:39:57 491

原创 poj 1451(Trie)

题意:就是让你模拟手机输入单词。具体就是给你一些单词,以及该单词被使用的频数,这个频数也是该单词前缀的使用频数,当然不同的单词有可能有相同的前缀,那么这个相同的前缀的使用频数就是这两个单词使用频数之和,以此类推。然后再给你一些数字串,让你针对该数字串的每一个前缀输出它的最有可能对应的单词(即频数最大的字符串)。解题思路:这道题目比我想象中的简单,直接dfs去搜,因为每个键的字母个数不超

2016-02-19 16:35:59 253

原创 poj 1195(二维树状数组)

解题思路:这是一道很裸的二维树状数组AC:#include#include#define N 1100int c[N][N],n,arr[N][N];int lowbit(int x){ return x&(-x);}void update(int x,int y,int num){ int i,j; for(i=x;i<=n;i+=lo

2016-02-19 11:59:44 277

原创 hdu 1510

White RectanglesTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Problem DescriptionYou are given a chessboard made up of N squares by N squares with equa

2016-02-18 17:02:10 596

原创 hdu 1511(dp)

转载标记处:http://blog.csdn.net/my_acm_dream/article/details/41577645解题思路:两次dp确实很巧妙,我只想到了一次dp算出最后那个数最小,其实题目要求还要保证第一个数尽可能大,一开始也没有注意到。。AC:#include#include#include#include#include#include#

2016-02-18 14:31:05 410

原创 hdu 1534(差分约束)

题意:安排计划,有4种约束方式,给出你这些时间的n个约束..  如果计划是可行的,求出每一件事发生的最早时间..否则输出“impossible”..    ①. FAF a b a要在b完成后完成..  ②. FAS a b a要在b开始前完成..  ③. SAS a b a要在b开始前开始..  ④. SAF a b a要在b结束前开始..

2016-02-18 09:26:30 370

原创 poj 3411(DFS多点访问)

题意:有n座城市和m(1解题思路:这道题的n与m都很小,dfs可以搞定,但这里与以往的搜索不同,以前dfs每个节点只能够访问一次,这里有多次访问的可能性。很好的是这道题给的是一个有向图,我们只要知道某节点被访问的次数即可,如果访问次数过多,那么肯定是走到了一个环,立即跳出来。。参考了别人的,节点访问次数最多只有3AC:#include#include#include

2016-02-17 17:31:45 381

原创 POJ 1505(二分+贪心)

题意:给一些书,这些书有不同的页数,让把这些书分成k份,必须是连续的,问这些份中页数和的最大值最小是多少。解题思路:知道了页数和的范围,而且书都是连续的,要找到页数和最大值的最小值可以直接二分答案。。AC:#include#include#includeusing namespace std;const int MAXM = 505;int m,k;int book[MA

2016-02-17 11:06:47 592

原创 poj 2362(剪枝)

题意:给定一堆不定长度的小棒子,问他们能否构成一个正方形。解题思路:最开始写的时候把题意弄错了,以为只要能够从中取出一部分构成矩形即可。。。。这里注意一下几个剪枝的地方:1)要把所有的棒子都用上且组成正方形,那么sum % 4 = 0;2)如果棒子长度小于4,肯定是不行的3)如果棒子中有长度大于sum/4的,肯定是组成不了正方形的。注意:对棒子长度进行排序时,从大到

2016-02-17 10:44:28 359

转载 poj 1753

转载标明出处:http://blog.csdn.net/lyy289065406/article/details/6642595#comments本题难点有两个,一个就是不要以全黑(或全白)作为目标进行搜索,而是要把全黑(或全白)作为“根”,去搜索树叶,看看是否有 输入的棋盘状态。 另一个难点需要一点数学功底,就是要知道 树 的最大高度,这是“状态不存在”的判断标准提示

2016-02-16 17:41:52 229

原创 poj 1691

题目大意:墙上有一块区域被分成了n个矩形,每个矩形要涂上各自的颜色。为了保证完美要求这一块区域可以进行涂色的条件是它上方的所有区域都已经涂好颜色,这样就不会有后续的操作影响这块区域的颜色。但是如果两块区域颜色不同就要换涂颜色用的刷子。问最少需要换几次。解题思路:由于这题有一个限制条件,即上方的所有区域都已经涂好颜色,所以肯定是要求一个满足条件的拓扑序列,既然这样就很好办了,把上

2016-02-16 10:56:40 907

转载 poj 1632

Vase collectionTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 2243 Accepted: 864DescriptionMr Cheng is a collector of old Chinese porcelain, more speci

2016-02-16 08:45:07 388

原创 poj 1190(剪枝)

生日蛋糕Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 16191 Accepted: 5751Description7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 Ri+

2016-02-15 20:57:55 332

原创 poj 1201(差分约束)

IntervalsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 23934 Accepted: 9075DescriptionYou are given n closed, integer intervals [ai, bi] and n integer

2016-02-15 10:22:48 281

原创 poj 1017

题意:一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的箱子数量BoxNum。解题思路:贪心思想:1)6*6、5*5、4*4的

2016-02-14 12:11:06 324

原创 poj 1716(贪心)

题意:给出数轴上的n个区间,每个区间都是连续的int区间。现在要在数轴上任意取一堆元素,构成一个元素集合V,要求每个区间和元素集合V的交集至少有两个不同的元素求集合V最小的元素个数。解题思路:考虑到区间之间的重叠性,所以每次都要尽可能地去每个区间靠后的值,才能保证前后两个区间公共的元素最多,其实把握了这个思想后就是个简单的贪心思想了。一开始我是拿每个区间的开始端进行排序,结果WA。。。后面

2016-02-14 09:19:57 317

原创 poj 1230(贪心)

解题思路:这道题目是用贪心的思想,从左向右扫描场地的每一列是否合法。若不合法,贪心的找出从该列起向右延伸最长的m道墙,移除这m道墙使得该列合法。我最开始代码会出现这样的问题:如果两个墙是连在一起的,那么会被当做一个墙来处理。。。AC:#include #include#includeusing namespace std;const int White = 0;int n,

2016-02-13 17:13:31 442

转载 hdu 1055(贪心)

思路:寻找最大权值,合并这个节点和他的父亲节点,记下这两个节点的拓扑序列,同时新节点的权值为这些节点的算术平均值,直到只有一个节点。因为这个节点必定是访问该节点的父节点之后第一个访问的节点。 证明:对于每一次新的访问,我们要计算所有未被访问的点权之和。显然这个计算式很繁琐且不易处理。ò  思考:根据访问代价的计算规则,对于根节点,它的权值需要计算1次;对于第2个访问

2016-02-13 09:54:03 689

转载 nyoj 47

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=47分析:如果n==1或者n==2,所有人直接过河即可;如果n==3,用时最短的和用时最长的一起过去,然后用时最短的回来,再和剩下的一个人过去 ;如果n>=4,设a[0]表示用时最短的人所用的时间,a[1]为用时第二短的人所用的时间,a[n-1]表示用时最

2016-02-10 20:33:29 320

原创 nyoj 1057

寻找最大数(三)时间限制:1000 ms  |  内存限制:65535 KB难度:2描述给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。求这个新的整数的最大值是多少。输入多组测试数据。每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).输出每组测试数据的

2016-02-10 17:27:46 297

原创 nyoj 287(区间覆盖)

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=287解题思路:首先求出来每个点的临界区域,即这个圆心能够将其覆盖的范围。。。求出了每个点的覆盖区域,那么问题就转化为区间的覆盖问题了。。。在算重叠的部分花了好长的时间而且还没有写好,还是没有把出现的情况讨论清楚。。。AC:#include#include#inclu

2016-02-10 12:54:27 393

转载 nyoj 12(区间覆盖)

贪心策略是将左端点从小到大排序,选择右端点,使得右端点尽量覆盖的最远AC:#include#include#includeusing namespace std;const int MAX=10001;struct interval{ double left,right;};bool cmp(interval a,interval b){

2016-02-10 10:54:59 297

原创 nyoj 914

解题思路:k个物品单位重量的最大价值一定不会超过单个物品单位价值的最大值,且一定不小于0,这样我们就求出了最终答案所在的区间。然后利用二分压缩区间,直到求出最终结果。这道题目确实把二分法运用的很巧妙。。AC:#include#include#include#includeusing namespace std;const int maxn = 10005;const doub

2016-02-09 19:09:51 469

原创 nyoj 586

疯牛时间限制:1000 ms  |  内存限制:65535 KB难度:4描述农夫 John 建造了一座很长的畜栏,它包括N (2 但是,John的C (2 输入有多组测试数据,以EOF结束。第一行:空格分隔的两个整数N和C第二行——第N+1行:分别指出了xi的位置输出每组测试数据输出一个整数,满足题意的最大的最小值,注意换行。样例输入

2016-02-09 14:51:19 268

原创 nyoj 55(优先队列)

懒省事的小明时间限制:3000 ms  |  内存限制:65535 KB难度:3描述      小明很想吃果子,正好果园果子熟了。在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。小明决定把所有的果子合成一堆。 因为小明比较懒,为了省力气,小明开始想点子了:  每一次合并,小明可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。

2016-02-09 09:46:42 301

空空如也

空空如也

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

TA关注的人

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