自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UVA 1025城市里的间谍(刷表法)

刷表法就是用一个状态i,去更新f(i)所影响到的状态,这道题lrj用的逆推,我用的正推,不过道理都一样,对于向左来的列车,是靠第j+1个车站去影响的,但一开始的时候,要把除了第一个车站的所有状态都设为无穷,因为人只在第一个车站,等到j+1个车站更新完状态后,前面的j个车站的状态对于向左行驶的列车才有实际意义。#include<bits/stdc++.h>#include<cm...

2019-11-30 11:05:20 100

原创 Uva 1025 城市里的间谍(刷表法)

刷表法,也就是对于每个状态i,更新f(i)所影响到的状态,书上是逆推,我用的是正推,道理都是一样的,对于向左的列车,用到的是第j+1个车站的状态,但一开始,人只在第1个车站,所以把其他所有个车站的状态设为无穷,所以只有在j+1已被算过的情况下,j+1前面的车站乘坐向左的列车才有意义。#include<bits/stdc++.h>#include<cmath>#defi...

2019-11-30 10:58:54 97

原创 排序(5)----归并排序及证明其时间复杂度O(Nlog^N)

归并问题可以解决有多个逆序对和最小和问题。下面证明其时间复杂度:对N个数归并排序的用时等于对两个大小为N/2的递归排序所用的时间再加上合并的时间: T(N)=2T(N/2)+N 两边同时除N T(N)/N=T(N/2)/(N/2)+1; T(N/2)/(N/2)= T(N/4)/(N/4)+1; . ...

2019-11-29 00:13:08 599

原创 排序(4)---堆排序

堆排序:把堆顶元素不断的和末尾元素互换,互换后使得末尾元素为n-1,再从堆顶元素往下滤,使之保持堆的性质即可。#include<bits/stdc++.h>using namespace std;typedef struct Heap{int capacity;int *data;} *heap; void percolatedown( heap h,int ...

2019-11-28 18:46:51 69

原创 排序(3)--桶式排序

事先设置桶的最大个数为要排列数中的最大值,把要排列的数放入相应下标对应的桶里,最后,从左到右遍历桶,桶里的个数就是该桶的下标所占有的个数,输出桶的下标即可。桶式排序是以空间换时间,并且对要排列的数有限制,不能为负。#include<bits/stdc++.h>using namespace std;void bucksort(int a[],int n,int m){...

2019-11-28 13:42:01 129

原创 排序(2)---插入排序、希尔排序

插入排序思想:有一串无序数列,从左到右依次排序把数放入排序篮里。如: 23 46 0 8 11 18 插入46 (23 46) 0 8 11 18插入23 (0 23 46) 8 11 18插入8 (0 8 23 46) 11 18插入11 ...

2019-11-28 12:38:50 54

原创 排序(1)--快速排序及证明平均复杂度O(n*lgn)与最坏情况O(N^2)

快速排序:首先说下复杂度O(lgn)是如何证明的,在一个数组中查一个数,一直对半下去… 查询次数 1 2 3 k待查询数量 N/2 N/(2^2) N/(2^3) N...

2019-11-28 00:16:30 659

原创 二叉树的前、中、后序非递归遍历

前序遍历:根-左-右void preprint(tree t){while(!q.empty())q.pop();q.push(t);while(!q.empty()){t=q.top();q.pop();printf("%d ",t->a);if(t->right!=NULL)q.push(t->right);if(t->left!=NULL)q...

2019-11-27 10:54:35 81 1

原创 动态规划---矩阵嵌套问题 (记忆化+字典序)

二刷动态规划,希望这遍加深对动态规划的理解,这道嵌套问题,可以转化为最长路,相当于为每个点找最行路,既然是最长路,就要按住一个点搜索到底,所以是DFS,然后找到第几个节点的长度最大,若有同样长度的节点,我们就用for+if(g[i][j] && d[i]==d[j]+1)的一个逆向思维来实现字典序.Sample Input814 915 1918 129 1019 1...

2019-11-25 16:57:31 334

原创 UVA1349最优巴士路线设计(最小权完美匹配+二分图+拆点法)

题目链接每个点恰好行成一个圈,说明点和点之间的连线只能有一条,所以直接二分图,找到二分图的最小权完美匹配,题中所给的点之间设置成容量为1,权重正常,再设置起点和汇点即可。如果返回的flow是图中点的个数,说明完美匹配上了,否则,无法完美匹配。#include<bits/stdc++.h>#define maxn 210#define inf 0x3f3f3f3fusing n...

2019-11-24 15:50:54 235

原创 uva 1658 (拆分点+最小费用最大流)

拆点法是解决节点容量的通用方法。 我们把除了1和n节点之外的节点都分成两个节点,让这些节点之间的容量为1,费用为0,然后把1和1’节点,n和n’节点的容量设置为2,把所有的’节点和不带’的节点相连,就能控制每个节点只能经过一次,因为一旦一个节点经过他本身的’节点,该节点就无法增广到该’节点,又因为’节点与不带’的节点相连,就能控制节点的经过次数。#include<bits/stdc++.h...

2019-11-22 23:37:38 125

原创 UVA 11082 矩阵解压 (网络流)

题目链接题意很好懂,这题的关键是看出每个所有行的元素总和等于所有列的元素总和,看出这个才能用网络流模板做题,之所以每行,每列-1,因为网络流中允许0流的出现,所以把1-20变为0-19,最后把答案+1即可。建好二分图以后,根据每行对所有列都有贡献,所以把每行对所有列连接起来,接下来求最大流,最大流实现后,(i,j)就是xi到yi的流量。#include<bits/stdc++.h&gt...

2019-11-21 20:07:37 121

原创 网络流--反向弧(EdmondsKarp中背向边的作用)

网络流–反向弧(背向边的作用)今天来讲一讲网络流中背向边的作用,相信大家对下面代码很熟悉void AddEdge(int from,int to,int cap){edges.push_back(Edge(from,to,cap,0));edges.push_back(Edge(to,from,0,0)); //背向边m=edges.size();G[from]....

2019-11-21 18:39:13 1243

原创 Uva 753 UNIX插头(网络流--最大流)

题目链接根据lrj的第一个想法: 有一源点s,该源点s和每个设备建立容量为1的边,让每个设备和一个插座结合,用floyd算法把每个能相互转换的设备之间建立联系,如:A可以转换到B,则从A发出一个容量为1的流进入B。 把所有的设备建立联系后。 再找一汇点t,各个插座发出一条容量为1的流进入t(因为每个插座只能匹配一个设备),最后我们开始建立网络流模型,直接套用EdmondsKarp模板算出最大网路...

2019-11-20 18:27:43 112

原创 Uva 658 这不是一个BUG,而是特性

该题目链接因为n<=20,所以不能事先用一个数组存储所有的状态,否则状态数最多可达到2的20次方,所以我们可以把每个状态看出一个节点,用状态转移当做边,对于每一个状态列举出所有的可用补丁。代码中状态1表示存在bug,0表示不存在。#include<bits/stdc++.h>#define maxn 1000#define inf 0x3f3f3f3fusing na...

2019-11-19 22:46:51 76 1

空空如也

空空如也

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

TA关注的人

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