自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

转载 C++ 二叉搜索树

二叉搜索树利用其特有的二叉树性质,使其搜索更方便源代码:struct node { int val; node *left, *right;};//the function of insertnode *insert(node *n, int key) { if (n == NULL) { node *t = new node; t-&...

2018-10-13 11:07:00 109

转载 Java实现Avl树

Avl树即左右子树的深度【高度】相差不可超过1,所以在插入key的时候,就会出现需要旋转【更改根节点】的操作下面是源代码:/*the define of avltree's node */class MyNode { int key, height; MyNode left, right; MyNode(int d) { ...

2018-10-13 09:59:00 120

转载 poj 2674 线性世界 弹性碰撞

弹性碰撞的题目一般都是指碰到就会掉转方向的一类题目,这里我们可以忽略掉头,仅仅看成擦肩而过,交换名字等等题意:一条线上N只蚂蚁,每只蚂蚁速度固定,方向和坐标不同,碰头后掉头,求最后掉下去那只蚂蚁的名字。思路:如果只有一只蚂蚁,就可以计算了但是如果题目很多只,这个时候就要用上弹性碰撞题目的解题技巧到最远的那只,确定它前进的方向找到前进方向有多少只跟其方向相反(...

2018-08-07 12:28:00 149

转载 尺取法 poj 2566

尺取法:顾名思义就是像尺子一样一段一段去取,保存每次的选取区间的左右端点。然后一直推进解决问题的思路:先移动右端点 ,右端点推进的时候一般是加然后推进左端点,左端点一般是减poj 2566题意:从数列中找出连续序列,使得和的绝对值与目标数之差最小思路:在原来的数列开头添加一个0每次找到的区间为 [min(i,j)+1,max(i,j)]...

2018-08-06 13:52:00 127

转载 poj 1759 二分搜索

题意:N个等差数列,初项X_i,末项Y_i,公差Z_i,求出现奇数次的数?思路:因为只有一个数出现的次数为奇数个假设 第二个数字的个数为 奇数个,其余全部都是偶数个 ,累计出现的次数 a1偶数 a1+a2 奇数 a1+a2+a3 奇数 ...

2018-08-05 15:32:00 91

转载 poj 1957 二分搜索

题意:N个灯泡离地H_i,满足H1 = A ,Hi = (Hi-1+ Hi+1)/2 – 1,HN = B,求最小B。思路:只要二分第二个灯泡的高度就可以推出全部灯泡的高度如果hi<0说明第二个灯泡的高度太高了一直缩小精度,就可以得到想要的答案解决问题的代码:#include <iostream>#include <st...

2018-08-05 15:27:00 84

转载 poj 3685 矩阵问题 查找第K小的值

题意:N阶矩阵Aij=i2+ 100000 ×i+j2– 100000 ×j+i×j,求第M小的元素。思路:双重二分考虑到,aij是跟着i递增的,所以i可以作为一个二分搜索统计比 mid小的个数如果个数小于 m的话 mid太小反之 mid太大解决问题的代码:#include <iostream>#inclu...

2018-08-04 16:04:00 83

转载 poj 2579 中位数问题 查找第K大的值

题意:对列数X计算∣Xi–Xj∣组成新数列的中位数。思路:双重二分搜索对x排序如果某数大于 mid+xi 说明在mid后面,这些数的个数小于 n/2 的话说明这个中位数 mid 太大 反之太小对x 搜索 ,直接用lower_bound实现解决问题的代码:#include <iostream>#include <stdio.h...

2018-08-04 16:01:00 69

转载 ACM 最大化平均值问题总结

主要是应用c(x)的满足条件有共通之处:c(x)表示要求解的那个表达式不小于x可以找到表达式 v/w>=x如果 v-x*w>0 说明有贡献 那就把贡献最大的找出来如果找出来之后 s>mid 说明 mid太小反之 mid太大转载于:https://www.cnblogs.com/xuxiaojin/p/9418415.html...

2018-08-04 13:27:00 188

转载 poj 3111 卖珠宝问题 最大化平均值

题意:有N件分别价值v重量w的珠宝,希望保留k件使得 s=v的和/w的和最大思路:找到贡献最大的设当前的s为mid(x)那么贡献就是 v-w*x 排序 ,取前k个bool operator<(const node& c) const { return v - x * w > c.v - x * c.w; }如果前k的s>mid说明 ...

2018-08-04 13:24:00 60

转载 poj 3045 叠罗汉问题 贪心算法

题意:将n头牛叠起来,每头牛的力气 s体重 w 倒下的风险是身上的牛的体重的和减去s 求最稳的罗汉倒下去风险的最大值思路: 将s+w最大的放在下面,从上往下看解决问题的代码:#include<iostream>#include<cstdio>#include<cstring>#include <algo...

2018-08-03 16:23:00 611

转载 ACM二分搜索中的最大化最小值 总结

这类题目都有个相似的地方就是需要你去找一个临界点。分析题目要你求什么,例如时间 那么mid就是时间看求得这个跟什么相关 例如 poj 3258 求得是距离 这个距离跟两者之间的差相关那题目要求你的答案满足什么? 满足 x[cur]-x[last]>=d;那这个就作为判断的条件 如果不满足 是太小还是太大了? 变化mid的大小这类题目基本上可以从以上几...

2018-08-03 16:20:00 122

转载 poj 3104 晾衣服问题 最大化最小值

题意:n件衣服各含有ai水分,自然干一分钟一个单位,放烘干机一分钟k个单位,问:最短时间?思路:mid为最短时间如果 a[i]-mid>0说明需要放入烘干机去烘干 烘干的时间为x 那么满足 kx+(mid-x)>=a[i] 可以推出 x=(a[i]-mid)/(k-1),记住要向上取余把所有需要烘干机烘干的时间都加起来 ans. 如果ans>...

2018-08-03 16:15:00 143

转载 poj 3273 分期问题 最大化最小值

题意:将N个账款分给城M个财务期,使得每个分期账款和的值最大?思路:每次mid为分期账款如果分期次数小于m说明mid太大,减上限 反正 增下限开始下限设为 最大值 上限设为和解决问题的代码:#include<iostream>#include<cstdio>#include<cstring>#inclu...

2018-08-03 16:09:00 67

转载 poj 3258 跳房子问题 最大化最小值

题意:奶牛跳房子,从n块石头中移除M块,使得间距最小的最大值?思路:“转换”从N块中选择n-m块使得两两之间的间距尽可能大c(d) 是间距最大的满足条件,即第一块 放在 xi的位置 下一块就要放在 xj-xi>=d的位置解决问题的代码:#include <iostream>#include <cstdio>#include...

2018-08-03 16:05:00 150

转载 poj 2377 拉最长的线问题 kruskal算法

题意:建光纤的时候,拉一条最长的线思路:最大生成树将图的n个顶点看成n个孤立的连通分支,并将所有的边按权从大到小排边权递减的顺序,如果加入边的两个端点不在同一个根节点的话加入,并且要将其连通,否则放弃最后剩下一个连通支解决问题的代码:#include<cstdio>#include<iostream>#include&...

2018-08-02 16:30:00 73

转载 poj 1258 建光迁问题 最小生成树

题意:给全村建光纤,求花费最小思路:最小生成树,树相对于图来说就是没有环m用来存图 v判断是否访问 low用来存两点间的最短距离给low赋值 for(i=1;i<=n;i++){if(i!=pos) low[i]=m[pos][i] else low[i]=0;}找最小值 即找顶点i的最小距离 for(int j=1;j<n;j++) for(i...

2018-08-02 16:25:00 237

转载 poj 3259 时光穿梭问题 bellman_ford算法

题意:有n个空地,有m条双向大路,w条时光隧道单向路。问能否回到过去?思路:判断是否有负环存在,如果有负环存在那么就可以一直小就可以回到过去了创建源顶点 V到其他顶点的距离d 初始为INF d[1]=0;计算最路径,执行v-1次遍历 对于每条边 if(d[v]>d[s]+t) d[v]=d[s]+t;判断是否有负环 遍历所有的边 计算u至v的距离,如果对...

2018-08-02 16:18:00 162

转载 poj 2139 奶牛拍电影问题 floyd算法

题意:奶牛拍一系列电影,n头牛拍m部电影,同一部电影种的搭档们距离为1,求最小距离?思路:Floyd 图 最短路径存图: 初始化图for (int i = 0; i <= n; i++) { for (int j = 0; j <= n; j++) f[i][j] = INF; f[i][i] = 0; } 存图:for...

2018-08-02 16:11:00 104

转载 poj 3292 H-素数问题 扩展艾氏筛选法

题意:形似4n+1的被称作H-素数,两个H-素数相乘得到H-合成数。求h范围内的H-合成数个数思路:h-素数 h-合成数for(int i=5;i<maxn;i...

2018-08-02 16:03:00 105

转载 poj 3614 伪素数问题

题意:1.p不是素数 2.(a^p)%p=a 输出yes 不满足输出no思路:判断素数问题,直接暴力判断bool is_prime(int n){ for(int i=2;i*i<=n;i++) if(n%i==0) return false; return n!=1;} 2.(a^p)%p快速幂 注意大数...

2018-08-02 15:55:00 111

转载 poj 1995 快速幂

题意:给出A1,…,AH,B1,…,BH以及M,求(A1^B1+A2^B2+ … +AH^BH)mod M.思路:快速幂实例3^11 11=2^0+2^1+2^3 =》 3^1*3^2*3^8=3^11实现代码:int solve(int a,int b){ int ans=1; while(b){ if(b&1) ans=a...

2018-08-02 15:50:00 115

转载 poj 3280 回文字符串问题 dp算法

题意:给一个字符串,构成回文(空也是回文) 其中增删都需要代价。问:代价最少?思路:把字符串s变空 dp[i][j]表示变成回文的最小代价 for(i=m-1;i>=0;--i) for(j=i+1;i<w;j++)lsdjfl dp[i][j]=min(dp[i+1][j]+cost[s[i]-'a']],dp[i][j-1]...

2018-08-02 15:11:00 60

转载 poj 1742 多重背包问题 dp算法

题意:硬币分别有 A1.....An种,每种各有C1......Cn个,问组成小于m的有多少种思路:多重背包问题 dp[i][j]表示用前i种硬币组成j最多剩下多少个 dp=-1的表示凑不齐 dp[0][0]=0;for(int i=0;i<n;i++) for(int j=0;j<=m;j++){ if(dp[i][j...

2018-08-02 14:08:00 90

转载 poj 3616 奶牛产奶问题 dp算法

题意:奶牛产奶,农夫有m个时间段可以挤奶,在工作时间 f t 内产奶量为m,每次挤完奶后,奶牛需要休息R。问:怎么安排使得产奶量最大?思路:区间dp dp[i]表示第i个时段对农夫工作的结束时间由小到大排序将第i时段 如果前面与其不冲突记录下来 inter[k].e+r>inter[i].b 表示冲突递推公式 dp[i]=max(dp[i-],dp[p[i]]...

2018-08-02 13:53:00 366

转载 poj 2385 树上掉苹果问题 dp算法

题意:有树1 树2 会掉苹果,奶牛去捡,只能移动w次,开始的时候在树1 问最多可以捡多少个苹果?思路: dp[i][j]表示i分钟移动j次捡到苹果的最大值实例分析 0,1 1,2...说明 偶数在树1 奇数在树2 for (int i = 1; i <= n; i++) { scanf("%d", &t[i]); t[i] -= 1; }...

2018-08-02 13:43:00 89

转载 poj 2229 拆数问题 dp算法

题意:一个n可以拆成 2的幂的和有多少种思路:先看实例1 12 1+1 23 1+1+1 1+24 1+1+1+1 1+1+2 2+2 45 1+1+1+1+1 1+ 1+1+2 1+2+2 1+4对于奇数:相当于前面一个偶数的每一种情况的开头+1 dp[i]=dp[i-1]对于偶数 分两种...

2018-08-02 13:35:00 76

转载 poj 3176 三角数和最大问题 dp算法

题意:给一个三角形形状的数字,从上到下,要求数字和最大思路 :dpdp[i+1][j]=max(dp[i+1][j],dp[i][j]+score[i+1][j])dp[i+1][j+1]=max(dp[i+1][j],dp[i][j]+score[i+1][j+1]在最后一行进行比较,找到最大值输出对上面思路的解释:对于每个位置都是由上面一个位置加当前位...

2018-08-02 13:29:00 103

转载 poj 2236 网络连接问题 并查集

题意:n台电脑,当两台之间的距离小于d的时候可以连接。 题目会进行操作“修复”还有“查询是否已经连接”。只要在查询的时候输出YES或者ON思路:把可以相互连接的 即两者之间的距离小于 d q[i].push_back(j) 还有 q[j].push_back(i) 这里面的q为动态数组 q[i]存储的是可以与i相连的机器每台机器的初始根节点为i修复操作的时候,进行...

2018-08-02 13:20:00 90

转载 poj 3614 奶牛美容问题 优先队列

题意:每头奶牛需要涂抹防晒霜,其中有效的范围 min~max ,现在有L种防晒霜,每种防晒霜的指数为 f 瓶数为 l,问多少只奶牛可以涂上合适的防晒霜?思路: 优先队列+贪心当奶牛的 min<f 时 把奶牛的max 进队列取队列 与 f比较 如果小于 继续 否则 l减去1 ans+1思路解释:min<f时表示可以访问, 取max与f进行比较,因为先前对f进...

2018-08-02 13:10:00 93

转载 poj 3187 三角数问题

题意:给你两个数,一个n表示这个三角有多少层,一个sum表示总和思路: 类似杨辉三角 1 1 1 1 2 1第n行的第k个数 为 n!/k!(n-k)!暴力枚举,因为杨辉三角每行的第一个数都是1,所以你需要每行都乘上一个系数排列系数解决问题的代...

2018-08-02 12:49:00 91

转载 poj 2718 切数问题 穷竭搜索

题意: 给一个已经排序号的数字,从中间切一刀,成两个数,要求这两个数的差最小思路:暴力比较差最小值stl中的next_permutation()函数进行排列 注意:这个函数必须从小到大才可以排序把所有排序写出,从中间切,前面一个数,后面一个数,找到最小if (a[mid]) { int x = a[0]; int y = a[mid]; for (int ...

2018-08-02 12:41:00 143

转载 ACM 广度优化搜索算法总结

广度优化搜索算法的本质:要求每个状态不能重复,这就需要我们:第一次先走一步可以到达的状态,如果还没有找到答案,就需要我们走到两步可以到达的状态。依次下去核心算法:队列基本步骤: 1.将最初状态添加到队列 2.从对列的前端不断取出状态 3.队列后端添加该状态,可以转移且并没有被访问过的状态...

2018-08-02 12:29:00 86

转载 poj 3669 火星撞地球问题 bfs算法

题意:火星撞地球,你要跑到一个永远安全的地方,求最短时间思路:bfs+预处理 这题的数据量比较大,所以需要进行预处理对每个位置设上时间(被撞的最早时间) 未被撞的设为-1for (int j = 0; j<5; j++) { //预处理 int dx = x + dir[j][0], dy = y + dir[j][1]; if (dx < ...

2018-08-02 12:23:00 109

转载 poj 2251 三维地图最短路径问题 bfs算法

题意:给你一个三维地图,然后让你走出去,找到最短路径。思路:bfs每个坐标的表示为 x,y,z并且每个点都需要加上时间 tstruct node{ int x, y, z; int t;};bfs用队列,进队列的时候要标记,并且 t+1;最先到达终点的,所花的时间必定最短代码上的小技巧:三维地图需要你去遍历的时候需要走六个方向:int dx...

2018-08-02 12:14:00 555

转载 ACM 深度优化搜索算法小总结

深度优化搜索算法的本质:就是从一状态不断转移,如果无法转移了就需要返回上一个状态,知道找到解为止。其核心:递归函数基本模型:dfs(int i, int j){ //控制结束条件 //进行状态的转移 //调用自身进行遍历 dfs(0, 0); //结束程序}转载...

2018-08-02 12:00:00 117

转载 poj 2676 数独问题 dfs

题意:完成数独程序,数独要求每行每列且每个3*3矩阵都必须是1~9的数字组成。思路:dfs用row[i][n] 记录第i行n存在 用col[j][n] 记录第j列n存在 grid[k][n] 记录第k个3*3中的n存在遍历的时候,先把列遍历完然后在遍历行if (map[r][c]) { if (c == 8) flag = dfs...

2018-08-02 11:56:00 104

转载 poj 2531 分权问题 dfs算法

题意:一个集合(矩阵) m[i][j]=m[j][i]权值,分成两个集合,使其权值最大。注:在同一个集合中权值只能算一个。思路:dfs假设都在集合0遍历 id 的时候拿到集合1如果与 id 相关的在集合 0 整体权值要加 否则整体权值要减如果拿到集合 1 权值变大了,继续向后dfs,然后接着一个回溯的操作代码上需要注意的问题:for (int i ...

2018-08-02 10:33:00 168

转载 poj 3050 地图5位数问题 dfs算法

题意:一个5*5地图上面,从任意位置上下左右跳五次,组成一个数。问:不重复的数有多少个?思路:dfs从任意位置跳5次,说明每个位置都需要遍历。组成一个数:number*10+map[dx][dy]不重复的数字,用set(集合)来存储只需要每次跳的时候步数加1,并且可以跳的位置,只要不超过范围就可以,即一个位置可以重复跳解决问题的代码:#includ...

2018-08-02 10:25:00 129

转载 poj 1321 排兵布阵问题 dfs算法

题意:有不规则地图,在上面放n个相同的棋子,要求摆放的时候不同行不同列。问:有多少种摆法?思路:dfs+回溯用一个book[]数组来表示当前列是否有放棋子一行一行的遍历,对一行来说遍历它的列,如果满足book[i] == 0 && map[cur][i] == '#' 则可以摆放,然后继续遍历下一行代码上需要注意的地方:for (int ...

2018-08-02 10:18:00 732

空空如也

空空如也

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

TA关注的人

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