自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林伏案的博客

伏案的学习笔记

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

原创 poj1182

/*translation:中文题solution: 并查集 本题除了需要维护相同集合的这个关系外还需要维护不同集合间的关系,如果像图论那样开个数组来 维护集合之间的关系会MLE。所以需要在并查集上进行改造使其能够表示不同集合之间的关系。方法 如下:因为总共只有三个大的集合,只是不知道每个元素属于这三个集合中的哪一个,所以并查集中 的元素形式可以改变成i~a,表示i号元素属于a集合。

2016-08-31 10:13:24 198

原创 poj3169(差分约束系统)

题目:点击打开链接/*translation: n头牛要进食,每两头关系良好的牛要求距离不超过d1,每两头相互讨厌的牛要求距离不小于d2。 牛从左往右编号1...n。现在给出ml对关系良好的牛以及它们的最大距离,md对相互讨厌的牛以及 它们的最小距离,求1号牛到n号牛的最大距离。solution: 差分约束系统,bellman_ford最短路 设d[i]表示第i头牛的坐标在d[

2016-08-30 17:46:40 366

原创 poj3255

题目:点击打开链接/*translation: 给你一张无向图,并标出每对可达两点之间的距离。要求从1~n的次短路径。 solution: 对dijkstra稍加改进。每当从队列中拿出一个边时,先与最短路径d[e.to]比较,如果比这个短,则更新且 次短路径d2[e.to]变为原来的d[e.to]值。如果比d[e.to]长,则直接与d2[e.to]比较,并松弛更新。 最后d2[n

2016-08-29 16:43:57 507

原创 poj1321(回溯板子)

该题存为板子描述:点击打开链接/*solution: 简单回溯note; 注意一定要考虑摆放时一定要按照行递增或者列递增顺序进行摆放。否则可能出现解重复的情况。date: 2016.8.28*/#include #include #include using namespace std;bool col_tag[10];int n, k, ans;cha

2016-08-28 11:35:16 418

原创 poj3009(dfs/bfs)

题目描述:点击打开链接/*translation: 题目给出冰壶初始位置,以及目标位置。要求以最短的步数将冰壶移动到目标位置。 注意冰壶每往一个方向走上一步,就将一直往这个方向移动知道碰上障碍。碰到障碍 时,障碍本身也被击碎。求出最短的步数是多少??solution: dfs,回溯,剪枝 要求最短路径的第一反映是用bfs,但这道题用dfs + 剪枝也能求出来。因为是求最优 解

2016-08-28 10:28:06 597

原创 uva12169(同余模运算+暴搜)

/*translation: 根据公式x[i] = (a*x[i-1] + b) % 10001 可以生成一串数列。现在给出x[1],x[3],x[5]...x[2*T-1], 要求其下标(从1开始)为偶数的部分。solution: 其实跟数论没太大关系,纯暴力。date: 2016.8.24*/#include <iostream>#include <cst

2016-08-24 20:55:24 408

原创 poj3083(dfs/bfs混合)

链接:http://acm.hust.edu.cn/vjudge/problem/15200/*translation: 先沿着左边的墙从 S 一直走,求到达 E 的步数。 再沿着右边的墙从 S 一直走,求到达 E 的步数。 最后求最短路。 solution: 最短路好求。重点是前两步! 很容易想到前两步用简单的dfs就可以求出。但是关键是要“沿着墙壁走”! 观察可以发现规律

2016-08-24 17:27:04 544

原创 poj2488(回溯板子题)

存着做模板#include #include #include using namespace std;int dir[8][2] = { {-1, -2}, {1, -2}, {-2, -1}, {2, -1}, {-2, 1}, {2, 1}, {-1, 2}, {1, 2} };int p, q, b[27][27];struct Map { int y, x;}a

2016-08-23 19:39:08 339

原创 poj1860(最短路,负环)

/*translation: 给出若干货币,以及货币之间的转换方法。假设知道A->B:r=29.75,c=0.39。则由100货币A转换为B为 B=(100 - 0.39) * 29.75 。现在给你一种特定的货币以及每种货币间的r和c,求其能否通过某种转换方式 使得最终转换为本来货币时,资产增加? solution: 最短路径的bellmanFord算法,判断负环。 可以设dis

2016-08-21 15:07:26 462 1

原创 poj1159(类LCS的转移方程)

/*translation: 给出一串字符串,求最少插入几个字符才能形成回文串。solution: 基本dp,LCS类转移方程 思路很简单,将原字符串及其反串求LCS,将原本字符串长度减去LCS长度就是答案。 状态定义和转移方程都和LCS一样。note: 该题目需要用滚动数组,不然会MLE。所以相应的求解方式也作出改变。详见代码。 理解滚动数组求解方式:只要画出网格图来代表原

2016-08-20 17:48:08 424

原创 poj1080(LCS类的转移方程)

/*translation: 题目大意是给出两个基因序列,要你求出这两个基因序列的相似度。所谓的相似度, 就是将基因串用‘-’填充使得两串长度相同后,将对应位置上的字母一一对应,再 根据题目给出的表计算出分数,由于用‘-’填充的做法有好几种,所以得分最高的那个 就作为相似度。solution: 基本dp,形如LCS的转移方程。 d[i][j]:串1选到第i-1个,串2选到第j-1

2016-08-20 14:49:01 367

原创 poj2533-----E[j]=opt{D+w(i,j)} 类型板子题

最长公共子序列,做板子用:#include #include using namespace std;const int maxn = 1001;const int INF = 1e30;int a[maxn], n;int dp[maxn];int main(){ //freopen("input.txt", "r", stdin); while(~scanf

2016-08-19 23:44:16 303

原创 poj1260(形如E[j]=opt{D+w(i,j)}的dp)

/*solution: 形如:E[j]=opt{D+w(i,j)}的dp d[i]:选到种类i的时候所能花费的最少费用. 状态转移方程: d[i] = (a[i] + 10) * p[i] + d[i-1]; d[i] = min(d[i], d[j] + (sum[i] - sum[j] + 10) * p[i]);note: wa的原因是状态转移方程出错,原本思路是枚举比i小

2016-08-19 23:14:28 317

原创 uva11582(同余模基础)

/*solution: 同余模运算 首先要观察到其周期性,设F[i] = f[i]%n; F[i]呈现周期性的规律。 找到这个规律的周期t,就可以轻松求出F[a^b]。note: 注意对a^b%n的正确姿势是pow_mod(a%t[n], b, t[n])。 而不是pow_mod(a, b, t[n])。这个很容易写错!date: 2016.8.19*/#include

2016-08-19 19:51:44 431

原创 poj1836(基本dp)

/*solution: 基本dp,最长上升子序列。 题目要求的其实就是一个呈三角波浪分布的一个最长序列。所以基本框架就是 枚举中间的卫兵i,j。求0~i的最长上升子序列,j~n-1的最长下降子序列。 用n减去两者的和就是答案。note: 开始之所以wa的原因是认为中间两个卫兵肯定相邻,但是其实也可以不相邻。date: 2016.8.18*/#include #inclu

2016-08-18 22:24:13 272

原创 poj3267

/*solution: d[i]表示从第i个位置到最后共有多少个最少可以删去的字符。题目所求结果就是d[0] 关于状态转移方程。一开始太过与拘泥与每一步来分析。其实完全可以只考虑一些 特殊 位置。比如只考虑在给出句子中与给出字典单词的首字母相同字符的位置。这样的话, 转移方程如下: d[i] = d[i+1]+1; 在句子中所在位置的字符不是字典中任何一个单词的首字母情况 d[i]

2016-08-18 14:37:09 376

原创 poj1276

/*solution: 赤裸裸的多重背包dp dp[i]表示能够凑出金额不超过i的最大金额数。 状态转移方程还是按照01背包问题演化而来:dp[i] = max(dp[i], dp[i-c[i]]+w[i])。 只不过在这里重量和价值都看成cash[i]。note: 注意在按照01背包求解时,循环条件要注意改成k*cash[i]!!date: 2016.8.17*/#in

2016-08-17 20:19:26 203

原创 poj1988

/*solution: 并查集note: 注意每次调用getParent都要更新under数组。这是最容易出错的地方! 由于路径的压缩,所以每次更新under时都相当与沿着路径更新。date: 2016.8.17*/#include #include #include using namespace std;const int maxn = 30000+5;in

2016-08-17 20:03:38 233

原创 poj1837

/*solution: 背包型dp dp[i][j]表示选到第i个时,平衡度为j的方法数. 转移方程:dp[i][j+C[k]*G[i]] += dp[i][j];note: 1:注意初始条件的初始化 2:关于该题目中平衡度,因为在极端条件下,左右两边的极限值为:20*25*15=7500 所以极限值范围:-7500~+7500;有由于下标不能为负数,所以将平衡值从0移动为750

2016-08-16 20:00:32 211

原创 poj1185

/*solution: 状压dp d[i][j][k]表示第i行的炮兵拜访情况为i,地i-1行炮兵拜访情况为k的前i行所能放的炮兵的最大解 初始化d[0][j][0] = soldier_num[j]; d[1][i][j] = max(d[1][i][j], d[0][j][0] + soldier_num[i])note: 注意d[i][j][k]中的j表示编号

2016-08-16 15:16:13 395

原创 poj1037

http://acm.hust.edu.cn/vjudge/problem/16370/*solution: 排列计数,dp,加参数描述dp状态。 dp[i][j][down/up]表示用i根木棒,首位选择第j短的长度,类型为down/up的排列数。 (定义第二根比第一根长的为up,反之为down)。状态转换方程如下: dp[i][j][up] = sum(dp[i

2016-08-15 19:54:34 546

原创 poj2373

http://acm.hust.edu.cn/vjudge/problem/16596/*solution: 单调队列优化dp 首先定义状态:f[i]表示恰好覆盖到i时,用了多少喷头。其次定义状态转移方程: 可以很容易看出当A<=j-i<=B时(A,B均为直径),f[j]=min(f[i])+1。但是 A和B之间最多可以相差1998,所以若是枚举的话肯定超时!所以可

2016-08-15 10:29:23 502

原创 poj1390

/*solution: 区间dp,加状态参数。 如果只是用状态dp(i, j)来描述消去方块i到方块j获得的分数是无法形成递推关系的。 因为在这个时候对于最右边的大块有两种选择,一是直接消去,二是将其与左边某个大块 合并删除。而对于选择二来说,删去未必是最有方案,也许还应该与左边的某方块合并后 消去。所以只有两个参数是无法准确描述状态并形成递推关系的。解决方

2016-08-13 22:35:22 641

原创 poj3436

/*solution: 网络流问题,需要求出路径上的流量。先用拆点法建图,然后直接用edmondKarp算法增广。 添加超源点和超汇点,在超源点和空零件的状态间连边,容量为无穷大。完成品和超汇点之 间也要连上边,容量也是无穷大。同时在可以相互配合的机器之间也连上容量为无穷大的边。 相互配合指的是一台机器生产出来的半成品能够由另外一台机器直接加工,这样的两台机器

2016-08-13 15:55:17 302

空空如也

空空如也

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

TA关注的人

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