自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 3280 Cheapest Palindrome (区间DP)

http://poj.org/problem?id=3280题目大意是说一个字符串,每插入或者删除一个字符都需要一定的代价,问怎样可以使这个字符串变成一个回文串,且花费最小。题目略坑:cin >> ch >> add[ch-'a'] 下标中的ch是上一个ch,所以要分开写。状态转移方程可以看出算[i,j]之前要先算i+1,j-1,所以注意循环顺序。i,j哪个先无所谓。可以画一个表[

2016-04-11 22:31:49 249

原创 POJ 3723 Conscription(kruskal求最大生成树)

http://poj.org/problem?id=3723题目的意思相当于是给出一个非连通图,非连通图可以看成是几个连通图的组合。每一次有人入伍的时候,都会和他/她所在的连通图中,和已经入伍的人中最亲密的那个连一条边,最后每一个连通图中都会有一棵树,因为所有人都入伍了,并且要求边长和最长的,那么就是一棵最大生成树。随便来一棵包含该非连通图全部结点的树,一定也是相对应几种入伍方式,一种

2016-04-11 22:13:29 923

原创 POJ 3255 Roadblocks(Dijstra 求次短路长度)

http://poj.org/problem?id=3255#include#include#include#includeusing namespace std;struct Node{ int e,w;};const int inf = (1<<25);int main(){ vector G[5005]; int n, m, num,

2016-04-11 22:11:18 275

原创 POJ 3616 Milking Time(区间DP)

http://poj.org/problem?id=3616#include#include#include#include#include#include#define N 1005using namespace std;int n, m, r, ans, tmp, st[N], ed[N], ef[N], dp[N], t;int main(){ sca

2016-04-09 21:44:40 247

原创 POJ 2385 Apple Catching(DP)

http://poj.org/problem?id=2385题意:现在有两棵苹果树,编号为1、2,在第i秒的时候其中一棵树会落下苹果。人可以瞬时移动到另外一棵树那里。现在有n秒,人最多移动m次,最多可以接到多少苹果。人一开始在第一棵苹果树下面。如果用秒定义,那么会说不清,还是用苹果吧。dp[i][j]表示在前i个苹果落下后移动j次可以接到最多的苹果数,j给出,人的位置是确定的。分为

2016-04-09 20:17:47 217

原创 POJ 2220 Sumsets(递推)

http://poj.org/problem?id=22291. 当 n 为奇数时, f[n] = f[n-1], 因为只需在所有的序列前添加一个 1 即可, 所有的序列同时延迟 1 位, 不会出现重复  若是这个 1 和其他的1组成 2 而不是放在首位, 怎么办? 不会这样, 因为这个序列肯定已经存在了  证明, 假设sum(s1) = 2*k, s1内部某个1加1得到 s2

2016-04-09 14:16:27 251

原创 POJ 3292 Semi-prime H-numbers(另类筛选)

http://poj.org/problem?id=3292题意:给出一个数n,问从1~n,有多少个数,被拆分成除1以外的被4除余1的数的时候,只有两项。比如125=5*5*5,被拆成了三项,就不符合条件。由于有多组数据,而且可能数据挺大,为了避免重复运算,所以选择打表,一次性算完最大的数据。对于一个除1以外被4除余1的数,如果它不能够被拆分,那么它乘以比它小的不能够被拆分

2016-04-09 11:45:23 311

原创 POJ 3126 Prime Path (素数筛选+bfs)

http://poj.org/problem?id=3126每次给出a,b两个素数,每一次都可以把前一个数转换成另外一个四位素数,但是有且仅有一个数位不同。问从a转换到b,需要的最少转换步数。首先求出从所有的四位素数,然后从a开始扩展与之有且只有一个数位不同的四位素数,最先扩展到b所需要的步数就是答案。怎么求四位素数,我这里用了区间筛选素数,其实无论哪一种方法都是可以的,这里就

2016-04-08 11:49:48 280

原创 Codeforces Round #346 (Div. 2) E (dfs)

http://codeforces.com/contest/659/problem/E题意:给出一个无向图,现在让你确定每条边的方向,使得入度为0的点最少。这个无向图中由几个连通块(其中任何一点都可以到达其他任何一点)组成。接下来理解的过程中,应该想象一下该连通块的样子。用dfs扩展连通块,在这个过程中,一般来说扩展的方向就是边的方向,可以发现只有起点的入度为0。但是如果出

2016-04-06 13:16:12 273

原创 POJ 1930 Dead Fraction(循环小数转换成分数)

http://poj.org/problem?id=1930这道题就是吧0.XX..的循环小数转化成分数,可能存在多个有可能的循环节,那么就选择输出分母最小的情况。#include#include#include#include#include#include#define LL unsigned long long#define INF ((LL)1

2016-04-05 21:39:50 350

原创 POJ 2429 GCD & LCM Inverse(Pollard_rho法质因数分解)

http://poj.org/problem?id=2429题意:已知两个数的最大公约数和最小公倍数,求原来这两个数。如果有多种可能,输出两数之和最小的组合。把lcm/gcd分解成两个和最小的互质的数,这两个数再各自乘以gcd就是答案。#include#include#include#include#include#include#define LL uns

2016-04-05 21:26:36 240

原创 Codeforces Round #346 (Div. 2) D (叉积)

http://codeforces.com/contest/659/problem/D题意:给出一个

2016-04-04 16:45:37 245

原创 Codeforces Round #346 (Div. 2) C (贪心)

http://codeforces.com/contest/659/problem/C题意:现在有价格为1~10^9的商品各一个,现在有m元钱,并且有n件商品(告诉你价格了)不能买。问最多可以买几件商品?当然是挑价格小的优先买了。从价格小的开始遍历,就算m是最大的10^9,就算n=0,那么在50000次不到的时候就可以到达m,由于n不是0,那么会多枚举几个,但是

2016-04-03 15:17:20 221

原创 Codeforces Round #346 (Div. 2) B (pair+vector的应用)

http://codeforces.com/contest/659/problem/B题意:每个区域中有一些人,这些人有人名和对应的分数,如果能够确定每个区域中分数前两名,就把这两个人的名字输出,如果不能确定,就输出问号。#include //包含了所有的头文件#define MAXN 100005using namespace std;int n, m, regio

2016-04-03 13:25:33 241

原创 一道dfs题目

题意:给出一些长度的线段,不能把这些线段切开,平均分成四组。问是不是可能做到。这道题很容易超时,优化方式有两个,一个就是对于第一条线段,默认把它放在第一组。第二个就是在枚举每一条边的线段组成时,都只要从上一条所选取得线段后面一条开始枚举即可。#include#include#include#include#define N 100using namespace s

2016-04-03 13:22:54 249

原创 POJ 2718 Smallest Difference(dfs 全排列)

http://poj.org/problem?id=2718这道题就把所有给出的数全排列,然后把数字划分为数量靠近的两堆,数量要么都一样,要么后面一堆比前面一堆少一个,然后两堆中的数字按照顺序组成数,绝对值不断更新最小值。要让difference最小,那么一定是数字划分成两堆的时候数量也要靠近。这样划分方法加上全排列,可以确保把所有的情况都考虑进去了。注意0不能为数字之首,但是要特判一

2016-03-30 18:29:14 269

原创 POJ 3669 Meteor Shower(BFS)

http://poj.org/problem?id=3669题意:有一块地,某个坐标在某个时刻会落下一颗陨石,那个坐标就被摧毁了,以后再也不能经过。现在问从(0,0)开始,每移动一格如果要花时间1,那么最少花多少时间可以到达安全的地方(不会被陨石砸到)?安全的地方就是指永远不会有陨石落下的地方,刚开始初始化的时候,让会被陨石砸到的地方标记上陨石最早落下的时间(注意对于每一个

2016-03-29 20:15:48 216

原创 POJ 2386(DFS 求连通块数量)

http://poj.org/problem?id=2386每一次搜索一个W,从它开始用DFS扩展,把一个连通块中的W都变成”."。重复下去,直到再也找不到W。注意这道题是八连通而不是四连通。#include#include#include#include#include#include#define N 105using namespace std;i

2016-03-29 17:31:00 251

转载 POJ 题目分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:  

2016-03-29 17:03:05 212

原创 POJ3111 K Best(二分 最大化平均值)

http://poj.org/problem?id=3111TLE了好几次的原因,快排对于已经有一定顺序的数排得比较快,所以要在上次排好的基础上,继续下一次排序。还有就是不用每一次都把新的选择保存下来,最后直接输出b[i].num就可以,因为100次循环以后,最后几次前k个b[i].num就是正解。一般而言,二分查找的时候左开右闭或者左闭右开都是无所谓的,初始状态中的l,r

2016-03-28 19:57:09 290

原创 POJ 3273 Monthly Expense(二分 最小化最大值)

http://poj.org/problem?id=3273和POJ3258很像,无非是把最大化最小值改为最小化最大值。#include#include#include#include#include#include#define N 100005#define INF 0x3f3f3f3fusing namespace std;int n, m, l, r, m

2016-03-28 18:50:10 252

原创 POJ 3258 River Hopscotch(贪心+二分查找 最大化最小值)

http://poj.org/problem?id=3258题意:现在有一条长为L的河,在最前和最后都有一块石头,现在再给出中间的n块石头到最前面的距离,问去掉n块石头中的m块石头之后,剩下的石头之间距离最小值最大可以是多少。首先假设去掉少于等于m块石头后石头之间的距离必须都大于等于x,如果可以做到,再扩大x的值,最后得到的x就是答案。我们想要得到的答案,是最小距离刚好为x

2016-03-28 17:30:13 462

原创 POJ 2976 Dropping tests(二分查找 最大化平均值)

http://poj.org/problem?id=2976#include#include#include#include#include#define N 10005#define INF 0x3f3f3f3fusing namespace std;int n, k;double l, r, mid, a[N], b[N], v[N], s;bool cmp(d

2016-03-27 14:06:25 263

原创 POJ 3276 Face The Right Way(一维反转问题)

http://poj.org/problem?id=3276反转两次等于没有反转,反转的次序是无关的。假设所有的格子进行一系列反转操作以后都变成F,那么可以把这一系列操作等价为,按照格子从左到右,每个区间反转1次或者不反转。对于最左边的格子,可以确定到底是反转还是不反转,然后再考虑下一个格子。#include#include#include#include#include

2016-03-27 13:12:06 201

原创 POJ 3320 Jessica's Reading Problem(尺取法)

http://poj.org/problem?id=3320为了避免开一个下标范围过大的数组,可以用set统计不同的数的个数,用map记录某一个数的一些信息。#include#include#include#include#include#include#include#define N 1000005using namespace std;int a[N];i

2016-03-26 20:47:20 154

原创 POJ 3061 Subsequence(尺取法)

http://poj.org/problem?id=3061#include#include#include#include#include#include#define N 1000005using namespace std;int a[N];int main(){ int T, n, s, res, sum, S, t; scanf("%d",

2016-03-26 20:43:34 141

原创 POJ 2456 Aggressive cows(二分查找 最大化最小值)

题意:给出n个牛棚的位置,选择其中的m个给牛住,使得牛之间的距离的最小值最大。首先我们可以知道距离的最小值一定产生于相邻的牛之间,所以要保证相邻牛之间的距离大于等于这个最小值d。所以把牛棚的位置从小到大排序,然后在最小的那个位置先放一头牛,再找下一个牛棚放牛,下一个位置和当前的位置间隔必须大于等于d。如果满足条件,即可以找到m个牛棚给牛住,那么再尝试让d大一点。为什么每一次都是大于等于

2016-03-25 16:25:55 837

原创 POJ 1064 Cable master(二分查找 求近似解)

题意:有N条绳子,给出它们的长度,现在要从他们中间切割出K条长度为L的绳子,问L最大可以是多少?答案保留小数点后两位。这道题就是求一个最大的近似解,满足条件,从N条绳子中切割出K条长度为L的绳子。(l,r]左开右闭,当mid求出来的可切割出的绳子数量刚好是K的时候,还是选择进入到区间(mid,r],因为r会不断向mid逼近,那么最后答案还是一样的。答案保留小数点后两位,要用fl

2016-03-24 21:02:01 385

原创 POJ 2236 Wireless Network(并查集)

http://poj.org/problem?id=2236题意:给出一些电脑,它们目前都是损坏的状态,然后会依次修其中的一些,如果两台电脑都被修好了,并且它们之间的距离小于等于d,那么这两台电脑是可以沟通的。如果AB可以沟通,BC可以沟通,那么AC也是可以沟通的。现在查询两台电脑的时候,问它们是不是可以沟通的。刚开始的时候,每一台电脑都是一个集合。每一个集合之内的电脑都可

2016-03-24 19:16:12 194

原创 HDOJ 1698 Just a Hook (线段树区间更新求区间和)

setv[o]表示o结点以下的所有儿子节点上f都没有被更新。#includeusing namespace std;#define ls o<<1#define rs o<<1|1# define root 1,1,nconst int MAXN = 500010;int f[4*MAXN],setv[4*MAXN];void maintain(int o,int l,int r

2016-03-23 15:41:05 291

原创 HDOJ 1754 I Hate It (线段树单点更新求区间最大值)

http://acm.hdu.edu.cn/showproblem.php?pid=1754#include#include#include#include#include#include#define VN 200005#define INT_MIN -0x3f3f3f3fusing namespace std;int N, n, m, x, y, a, T, A[

2016-03-23 15:33:53 200

原创 HDOJ 1166 敌兵布阵(线段树单点更新求区间和)

#include#include#include#include#define VN 50005#define INT_MAX 0x3f3f3f3f#define LL __int64using namespace std;int N, n, x, y, a, T, A[VN*3];LL dat[VN*3];char s[20];void init(int n_){

2016-03-23 15:30:33 199

原创 POJ 2155 Matrix(二维树状数组)

http://poj.org/problem?id=2155

2016-03-14 22:08:11 270

原创 POJ 1990 MooFest(树状数组)

http://poj.org/problem?id=1990题意:一群奶牛排在一根坐标轴上,并且知道奶牛的位置,每个奶牛都有一个对话时候能够听到的最小音量。每两个奶牛对话的时候,所需要的音量就是两头牛最小音量的较大值,消耗体力就是这个较大值乘两头奶牛的距离。问两两奶牛都进行对话的情况下,要消耗多少体力?输入数据中,左边的数代表音量,右边代表位置。将奶牛按照音量从小到大排序,

2016-03-13 21:24:29 503

原创 HDOJ 1541 star(树状数组)

http://acm.hdu.edu.cn/showproblem.php?pid=1541这道题告诉我们若干颗星星的坐标,告诉我们的时候y坐标已经按照升序排列了。对于每一颗星,它的等级数等于它左边和左上角星星的颗数。最后问每一颗星星的等级。把星星按照给我们的顺序(就是y坐标从小到大的顺序),依次把一个数组中下标为x的元素加1。对于某一颗星,坐标为x,那么把数组中下标为x及之前的所

2016-03-13 21:15:46 457

原创 HDOJ 1892 See you~(二维树状数组)

http://acm.hdu.edu.cn/showproblem.php?pid=1892题意:有一个矩形书架,被分成很多个格子,刚开始的时候每一个格子都会有一本书。现在给出ADMS四种操作,DM要注意,如果所删除或者所移动的数量超过原来格子中书本数,最多也只能删除或者移动这些书本。还有MS操作时,给出的左边不一定是左上角和右下角的坐标。由于给出的坐标可能会出现0,但是树

2016-03-13 20:48:40 342

原创 HDOJ 3743 Frosh Week(树状数组求逆序对)

http://acm.hdu.edu.cn/showproblem.php?pid=3743这道题就是给出几个数排成一列之后,求逆序对的数量。把所有的数从第一个开始,给另外一个数组下标对应为这个数的元素加1。假设当前刚刚把下标为x的元素加1,那么目前数组里有的数除了刚才那个数之外,就是排在它前面的所有数。下标为x以前的数都是比x小,对应的元素值就是出现的次数。由此每放进去一

2016-03-13 20:34:01 889

原创 HDOJ 1556 Color the ball(树状数组)

http://acm.hdu.edu.cn/showproblem.php?pid=1556这道题题型是更改了连续区间内的所有数,对于每一个数更改量是一样的。然而求某一个点。对于此题更改量是+1。每当要更改区间[a,b]的时候,可以给数组(这里的数组并不是指把要改动的数排成一排,而是另外一个处理数组)中下标为a的元素加1,给下标为b+1的元素减1,那么求最后第x个数,就只要把该数组

2016-03-13 19:50:41 472

原创 HDOJ 1166 敌兵布阵(一维树状数组)

http://acm.hdu.edu.cn/showproblem.php?pid=1166题目是一道很经典的一维树状数组的题,改动一维数组中的一个点,求一段连续区间的和。原理可以去看训练指南,在打代码的时候要回想起那幅经典的图,修改某个值的时候,是向右上角爬,从左子树到父结点,所以是i += lowbit(i)。而查询某一段区间的时候,是向左上角爬,从右子树到父结点,所以是m -=

2016-03-13 19:22:25 295

原创 HDOJ 1104 Remainder(BFS + 数论)

点击打开链接题意:题目给出一个数n,这个数可以通过多次+m -m *m %m的操作得到一个新的n,那么(最开始的n+1)% k = (现在的n)% k,最少要几步,并且输出步骤,如果步数一样输出字典序最小的。+  - 令km = k*m这道题还是BFS,不断扩展,一直到满足条件。如果遇到n%km的结果一样,就不用继续扩展了,如果n1 = p1 * km + r n2 = p2

2016-03-10 20:26:32 230

空空如也

空空如也

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

TA关注的人

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