自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ACMer 梁剑锋 的博客

一点点的进步

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

翻译 【线段树维护区间编号 && 区间更新】HDU - 4614 Vases and Flowers

Problem Description 输入T,代表有T组测试数据。每组测试数据输入n, m。分别代表有n个花瓶,编号为0-(n-1)。接下里有m行操作:分为两种操作。 (1) : 1 x y :从第x个花瓶开始往后放y朵花。有位置就放,没位置就跳过,直到放完或者超过n-1 同时 返回最开始放的花瓶编号和最后放的花瓶编号如果一朵也放不了就返回”Can not put any one.”。(

2017-08-24 09:35:16 258

翻译 【线段树多符号区间更新】HDU - 4578 Transformation

Problem Description 输入n,m。给你长度为n的数组,初始化为0。接下里有m行操作: (1)”1 x y c”,代表 把区间 [x,y] 上的值全部加c (2)”2 x y c”,代表 把区间 [x,y] 上的值全部乘以c (3)”3 x y c” 代表 把区间 [x,y]上的值全部赋值为c (4)”4 x y p” 代表 求区间 [x,y]

2017-08-24 09:10:03 229

翻译 【维护区间最长连续子序列 && 线段树 && 区间归并】HDU - 1540 Tunnel Warfare

Problem Description 输入n,m。分别代表有一个1-n的序列,接下来m行,分别有三种操作。 D x: 将x这个点破坏掉,x这个点就会破坏连续子序列。Q x: 询问包括点x在内的最长连续子序列长度(一开始的时候是n)。R: 恢复最近一个被破坏的点。思路: 我们需要维护一个区间里面,从左向右最长的连续子序列lmax, 从右向左最长的连续子序列rmax, 同时用一个变量o

2017-08-24 08:46:08 279

翻译 【线段树区间更新 && 染色】ZOJ - 1610 Count the Colors

Problem Description 给你一个n,接下来n行,每行x1,x2,c代表将一维坐标轴上的x1-x2这段区间染色成颜色c,先画出来的可能会被后面画出来的覆盖掉。问你最后能看到的颜色和条数思路: 区间更新,只需要lazy标记就好了。x1需要++,因为区间段少1。详细看代码#include<bits/stdc++.h>using namespace std;#define l

2017-08-24 08:26:14 387

翻译 【离散化 && 线段树 && 染色】POJ - 2528 Mayor's posters

Problem Description 给你T组测试数据,每组测试数据输入n,代表有n行,接下来每行输入ul, ur代表海报贴的区间覆盖是ul-ur。问你贴完后能看到多少张海报。Sample Input 1 5 1 4 2 6 8 10 3 4 7 10Sample Output 4思路: 因为

2017-08-23 21:56:06 204

翻译 【BFS && 树】UVALive - 7460 Maximum Cut Order

Problem Description 给你T,代表有T组测试数据,每组测试数据给你三个数n,s,m,n代表有n个结点1-n。s代表输出的起始点。m:代表两点之间的边权等于两点的编号相减的绝对值对m取模。让你输出序列,以s开始的序列。该序列满足距离现有的点,最大的边权点进来,如果边权一样,编号最小的点进来。思路: 建边,因为1-n个点,而且是完全二叉树的结构。我们可以根据root的儿子是r

2017-08-23 14:22:15 198

翻译 【割点 && dfs】UVALive - 7456 Least Crucial Node

Problem Description 给你n,s,m分别代表n个点,s为特殊点,m条边。让你求去掉那个点?使得其他点不能到达s点的点最多。如果存在割点,一样多的。输出编号最小的。思路: 割点的条件, low[to] >= low[u],u就是割点。所以我们求出割点后,我们可以根据这个条件去dfs,low[to]>=low[u]的to点,这些点都不能到达特殊点。我们记录个数。求出最大个数对

2017-08-23 14:07:01 235

翻译 【(KMP || 扩展KMP) && S串的每个后缀在T串中出现的次数】HDU 6153 A Secret

Problem Description 给你T组测试数据,每组测试数据,给你两个串,一个母串一个子串,让你求子串的所有后缀串,对于每个后缀串都和母串匹配,求出匹配次数,匹配次数*后缀串长度 求和 % 1000000007就是结果。Sample Input 2 aaaaa aa abababab abaSample Output 13 19Hint

2017-08-21 09:16:51 349

翻译 【最大流 模板 Dinic】POJ 1459 Power Network

Problem Description 给你n, np, nc, m。分别代表有n个点,其中np个是发电站,nc个是消费者,剩下n-np-nc个就是中转站。接下来给你m条边,每条边格式(u,v)w。代表u点到v点这条线路最大能够运输w的电。最后给你np个点最大能够输出的电,nc个点最大能够接收的电(格式:(u)w, u这个点能够输出(接收)最大的电,发电站的点是输出,消费者的点是接收)。思路:

2017-08-17 09:55:43 283 2

翻译 【最大流 模板题 EdmondsKarp】HDU - 1532 Drainage Ditches

Problem Description 给你m,n分别代表m条边,n个点。接下来给你m条边,每条边u,v,w。u->v流量的容量为w。有重边思路:模板题,所以给几个模板EdmondsKarp-dfs实现//dfs实现#include<bits/stdc++.h>using namespace std;const int N = 1000;const int inf = 0x3f3f3f

2017-08-16 19:40:31 253 4

翻译 【二分答案&&最短路】URAL - 2034 Caravans

Problem Description 给你n个点,m条边。接下来m行每行u, v代表u 可以到达v,边权为1。最后一行输入s,f,r。代表s到f的所有最短路中。让你求r到这些最短路中最小值的最大值。(r到这些最短路的距离是最小值。但是因为有很多条最短路,所以找出到这些条最短路的最大值)思路: 先求出s-f的最短路的值res。在求出r到各个点的最短路。这时候二分答案。从1-n查找答案。假设

2017-08-14 21:42:40 276

翻译 【dp】POJ - 3666 Making the Grade

Problem Description 给你一个长度为n的序列。你可以使得其中一个数+1或者-1。问你至少需要操作几次,可以让整个序列变成单调增或者单调减(包括相等)1 2 2 3在这里算单调增。思路: 因为最小的变化情况肯定是变为自己左边的数,或者右边的数。所以最后变成的序列肯定由原本序列的数组成。每次从原来序列中挑选出与a[i]差值绝对值最小的元素。从(i - 1)的dp[j]中挑选出

2017-08-14 21:18:58 151

翻译 【dp】 HDU - 2859 Phalanx

Problem Desciption 给你一个n * n的矩阵,求符合对称矩阵的最大子矩阵的宽度。(对称矩阵)以左下角到右上角的对角线,其他字母按照这条对角线对称。思路: 1*1的矩阵,肯定是对称矩阵,所以可以对第一行初始化为1。状态转移方程:第二行开始就变成2*2的子矩阵了,这时候以自身为开始,向上,向右比较(匹配),相等的数量称为匹配数。如果匹配数大于dp[i - 1][j + 1]。

2017-08-14 20:52:45 201

翻译 【记忆化搜索】POJ - 1088 滑雪

Problem Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 5 16 17 18 19 6

2017-08-14 09:08:21 204

翻译 【记忆化搜索】HDU - 1078 FatMouse and Cheese

Problem Description 给你两个数n, k。接下来给你一个n * n 的矩阵,矩阵上的值,代表奶酪数,到那个值,你就可以把那个值所有奶酪吃掉。下一步只能去更大的值(k代表你的下一步可以最大走k距离,也就是你下一步可以走1-k之间的任何一个距离)。思路: 用数组存已经走过的点,这样就可以避免重复走导致浪费大量的时间(记忆化搜索)。#include<bits/stdc++.h

2017-08-14 09:00:20 257

翻译 【dp】POJ - 3186 Treats for the Cows

Problem Description 给你一个n,接下来有n个数,你可以每次从最前面或者最后面取出一个数data,得到的价值就是data * (第几个取出这个数)。让你求出取完所有数得到的最大价值。思路: 正常想法会想到贪心,每次取出最小的(这样会错)。所以我们选择用dp, dp[i][j],i表示左边取了i个,j边上右边取了j个。状态转移方程就是 dp[i][j] = max(

2017-08-14 08:53:14 213

翻译 【最长上升子序列 && 输出路径】HDU - 1160 FatMouse's Speed

Problem Description 给你若干个,老鼠的数据,数据里面有两个,一个是体重,一个是速度,让你求出最长的子序列,按照体重不断的减少,速度不断的增加。思路: 我们按照速度从大到小排序,就变成了求体重最长上升子序列了。状态转移方程dp[i] = max{dp[0]…..dp[i - 1]}(满足上升条件) + 1.#include<bits/stdc++.h>using na

2017-08-14 08:44:10 810

翻译 【dp】HDU - 1260 Tickets

Problem Description 一个人八点开始上班,卖票,可以一次卖一张,也可以一次卖相邻的两张,问你最快什么时候可以下班。给你T组测试数据,每组测试数据给你一个n,代表有n个人排队买票,给你n个数,代表每个人买票需要的时间,给你n-1个数,代表相邻两个人一起买票需要的时间。思路:比较简单,想一想状态转移方程就出来了: dp[i] = min(dp[i - 1] + a[i], dp[

2017-08-12 19:57:57 257

翻译 【dp】HDU - 1176 免费馅饼

Problem Description 为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼). 给你一个n,接下来有n行 x,T,分别代表n个馅饼,在T秒的时候落在了x的位置。思路:

2017-08-12 19:51:42 263

翻译 【状态压缩dp】HDU - 1074 Doing Homework

Problem Description 给你T组测试数据,每组测试数据给你一个N(1<=N<=15) 接下来有N行,每行分别代表需要做作业的科目,截止时间,完成需要花费的时间。如果不能在截止时间完成作业,那么考试分数就会被扣分,超出几天,就扣几分,让你求出最少的扣分。思路: 因为N比较小,所以可以枚举所有的情况,(1左移n) - 1代表n个1的二进制,我们用1来表示完成了该科目,0表示还没

2017-08-12 19:37:29 209

翻译 【m段最大连续子段和的和】HDU - 1024 Max Sum Plus Plus

Problem Description 给你m, n, 接下来有n个数,让你求m段 连续子段的和 的和的最大值思路: 求1段的时候就是最大连续字段和 状态转移方程就是dp[j] = max(dp[j] + a[j], a[j]); 然后求出最大的dp[j]就是结果,现在是m段,那么到了第2段的时候,我们得用数组Max[]记录第一段到了j - 1的时候的最大值,这时候状态转移方程就是 dp

2017-08-12 19:16:24 365

翻译 【最大子矩阵和】51nod 1051 最大子矩阵和

Problem Desciption 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值。 例如:3*3的矩阵: -1 3 -1 2 -1 3 -3 1 2 和最大的子矩阵是: 3 -1 -1 3 1 2Input 第1行:M和N,中间用空格隔开(2 <= M,N <= 500)。 第2 - N

2017-08-09 11:23:59 295

翻译 【循环数组最大子段和】51nod 1050 循环数组最大子段和

Problem Description N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。

2017-08-09 11:15:11 222

翻译 【多重背包】51nod 1086 背包问题 V2

Problem Description 有N种物品,每种物品的数量为C1,C2……Cn。从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数)。求背包能够容纳的最大价值。Input 第1行,2个整数,N和W中间用空格隔开。N为物品的种类,W为背包的容量。(1 <= N <= 100,1 <= W <= 500

2017-08-09 11:06:18 212

翻译 【更难矩阵取数问题】51nod 1084 矩阵取数问题 V2

Problem Description 一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上。第1遍时只能向下和向右走,第2遍时只能向上和向左走。两次如果经过同一个格子,则该格子的奖励只计算一次,求能够获得的最大价值。 例如:3 * 3的方格。 1 3 3 2 1 3 2 2 1 能够获得的最大价值为:

2017-08-09 11:00:02 223

翻译 【子序列个数】51nod 1202 子序列个数

子序列的定义:对于一个序列a=a[1],a[2],……a[n]。则非空序列a’=a[p1],a[p2]……a[pm]为a的一个子序列,例如4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。对于给出序列a,有些子序列可能是相同的,这里只算做1个,请输出a的不同子序列的数量。由于答案比较大,输出Mod 10^9 + 7的结果即可。Input 第1行:一个数N,表示序列的长度

2017-08-09 10:50:37 383

翻译 【最长上升子序列】51 nod 最长单增子序列

输入 第1行:1个数N,N为序列的长度(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)输出 输出最长递增子序列的长度。 输入示例 8 5 1 6 8 2 4 5 10输出示例 5思路: 平时的方法,O(n * n)会超时,得用二分

2017-08-07 21:00:21 456

翻译 【编辑距离问题】 51 nod 1183 编辑距离

Problem Description 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: sitten (k->s) sittin (e->i) sitting (->

2017-08-07 20:50:35 245

翻译 【最长公共子序列】51 nod 1006 最长公共子序列Lcs

Problem Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。Input 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000)Output

2017-08-07 11:31:31 242

翻译 【割边 && 桥】UVA - 796 Critical Links

Problem Description 给你n个点的图,让你求出有几个桥,按字典序大小输出思路:会了割点,割边就是改一下 low[v] > dfn[u] 代表,u-v是割边, 裸的模板题,就不弄注释了,心累,看不懂代码,先去看割点#include<bits/stdc++.h>using namespace std;#define mm 10004struct node{ int

2017-08-04 10:48:32 213

翻译 【割点】UVA - 315 Network

Problem Decription 很裸的求割点 个数的题目。第一行给你n,代表该图有n个点。接下来每行给你一个u,u == 0退出循环,给你很多v,代表u到v有一条无向边。思路:num[]数组记录该点第几个走到(num[]值是不变的),low[]值是不断更新的,最开始等于num[]值,找到祖先了也就是更小的num[]的时候就更新。回溯的时候和孩子的low[]值比较更新,因为孩子能到的地方,

2017-08-04 10:40:59 205

翻译 【排列组合】UVALive - 6926 Maximum Score

Problem Decription 给你T组测试数据,给你n组数,每组数包含data, num,代表data这个数有num个。问你怎么排列这些数,求出最大的分数(如何求分数,一个数的左边递减个数包括相等 和 右边递减个数包括相等的和 加上 1(本身)就是该点的分数,但你要求出所有数的分数和)。求出最大分数一共有多少种组合思路:从小到大排序一定是最大的分数和。因为(只要这串数保持弧形)所以从小

2017-08-04 10:26:39 257

翻译 【数学物理问题】UVALive - 6921 Refraction

Problem Description 给你水槽,给你水槽的宽度W,水槽的高度H,需要被照射的点的横坐标x,光源点的坐标xe,ye.给你sin∠MPE/sin∠CPN的比值u,让你求水最低多低,光就可以照射到被照射点(具体题目去搜索原题);思路:列出两个方程,联立方程求h,判断h和H的大小关系。光线肯定过E点H点,这样才能使得h尽可能的小#include<bits/stdc++.h>usin

2017-08-04 10:17:05 253

翻译 【或 与 求和(二进制)】UVALive - 6918 And Or

Problem Description 给你T组测试数据,给你一个闭区间范围a-b,让你求该闭区间的所有数求或,求与。思路:10^18不会超过1<<60;从b to a 暴力查找各位二进制1 求 或, 查找0 求 与。b to a 一个数一个数的减,肯定会超时,如果比较1<<0为,就减1<<0,如果比较1<<50位,就减1<<50。如果该为是1,肯定会变成0,同理是0,肯定变成1。但是可能由于

2017-08-04 10:06:35 229

翻译 【字符串处理】UVALive - 6917 Decoding Baby Boos

Problem Description 给你T组数据,每组数据先给你一个串,只包含大写字母或者下划线。给你m组操作,每组操作有u, v两个大写字母,就是将串里面的所有字母v变成字母u思路:把B变成A, 把A变成C,就相当于把 B变成C。那一个数组来存最后该字母变成那个字母#include<bits/stdc++.h>using namespace std;char s[1000055];

2017-08-04 09:57:25 327 1

翻译 【枚举情况】UVALive - 6924 Load Balancing

Problem Description 给你T组数据,每组数据给你m个数,让你分配成四组,分别是0-a,a+1-b,b+1-c,c+1-160,(每组的人数 与 m / 4.0) 的差值的和最小。有多组情况,输出a,b,c最小的情况枚举所有情况#include<bits/stdc++.h>using namespace std;int a[200];//桶排的方式存数int main()

2017-08-04 09:51:38 197

翻译 【Floyd求最小环 && 保存路径】POJ - 1734 Sightseeing trip

Problem Description 一家旅游公式要开发一条心的旅游路线,要求这条路线尽可能的短,但是又不能只含有两个城市并且旅途中不能回到之前去过的城市,旅游结束的时候要回到最开始的城市。也就是求最小环,并输出路径顺序无所谓。Input 输入n,m分别代表n个城市,m条边,接下来m条边,u, v, w分别代表u v之间的路费 w. 可能有重边#include<cstdio>#inc

2017-08-03 08:19:24 203

翻译 【DAG && 拓扑】POJ - 3249 Test for Job

Problem Description 说的是一个人去找工作遇到了一道面试题,面试官要求给出一些城市和城市之间的道路,没到达一个城市,可能会赚一些钱,但是也可能会有损失。最终面试者的总所得会决定他是否会得到这份工作,那么显而易见的,总所得越多越好了。思路:给你n个点还有m条边,给你n个点的权值。经过的点都可以得到点上的权值,权值有负坑了我挺久的。让你求获得最大的权值。我们得将点值换成边值。设一

2017-08-02 19:29:44 217

翻译 【强连通分量模板题 && 加几条边变强连通】POJ - 1236 Network of Schools

Problem Description 给你N个学校的网络,接下来N行,每行输出整数,以0退出。代表第i个学校的网络能到达这n个整数。(1)要你输出至少需要几个学校网络就可以遍布所有学校网络。(2)如果想学校网络能够两两相互到达至少需要加几条边(其实就是将整个图变成强连通需要加几条边)思路:求出强连通分量缩点(DAG图),(1)入度为0的点的个数代表第一问题的答案。(2)找出入度为0点的最大个

2017-08-02 08:44:31 448

翻译 【Kosaraju && 连通分量】POJ - 2186 Popular Cows

Problem Description 给你n,m分别代表n头牛,接下来有m行,每行牛u和牛v之间的关系(代表牛u认为牛v是红人)* 如果牛u认为牛v是红人,牛v认为牛c是红人,所以牛u认为牛c也是红人*。思路:求出连通分量缩点 也就是强连通分量压缩成一个点的DAG图,只要判断图是连通的,出度为0的强连通分量(里面包含的牛的个数就是结果),Kosaraju算法 先将原图dfs一遍,越接近图的尾

2017-08-02 08:29:07 266

空空如也

空空如也

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

TA关注的人

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