- 博客(16)
- 收藏
- 关注
原创 草稿
Tyvj 1188 //矩阵连乘#include#include#include#includeusing namespace std;const int MAX=25;const int Inf=1000010;#define CLR(arr,val) memset(arr,val,sizeof(arr)) int n,a[MAX],DP[MAX][MAX],
2012-08-23 16:51:16 754
原创 线段树三:求任意区间的最值
从做这几个题目我发现了,能调用库函数的尽量调用库函数,不然的话可能会超时。不信可以试,在题1的头文件下定义宏:#define min(a,b) (a)<(b)?(a):(b)在题2中定义宏:#define max(a,b) (a)>(b)?(a):(b)题1:Tyvj 1038(忠诚),给定区间求最小值。只需更改Query即可,由于没有修改操作,可以删除Update操作。#
2012-08-29 10:02:10 1520
原创 线段树一:修改点的值求任意区间的值
强烈推荐:这篇文章------------------------(完全版)线段树。线段树的作用:解决区间计算问题。例如:记录一个区间的最值(最大或最小值)和总量,并在区间的插入、删除、修改中维护这些最值和总量。线段树是一颗二叉树。记为T(a,b),a,b表示顶点T为区间[a,b]。区间长度b-a记为L。递归定义T[a,b]:若区间长度L>=1,区间[a,(a+b)/2]为T的左孩
2012-08-28 08:53:18 2750
原创 SPFA算法
具体见:SPFA,这里面讲的很详细。它的大致算法流程:①、初始化时,把源点pos加入到队列中,并置Dist[pos]=0,其它各点到源点的距离设为Dist[V]为∞;②、每次取出队列中的一个元素,并以该点为中间点,对于该点有边相连的点V进行松弛操作,如果松弛操作成功,改进Dist[v]的值,并把v加入到队列中;③、反复进行②操作,直到队列为空,Dist[v]表示源点到其它各点的最短距离
2012-08-26 10:08:43 1974
原创 强连通分量
有向图的强连通分量:在有向图G中,如果两个顶点vi,vj间(vi!=vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量。如图所示:{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达,{5},{6}也分别为两个强连通分量。Tarj
2012-08-21 16:09:55 1352
原创 多进程DP
题1:NYOJ 61(传纸条),先看一个人的情况,DP[i][j]表示纸条到达(i,j)的时候好心程度之和的最大值,那么由于只能向下或者向右走,那么到达(i,j)位置可能是由(i-1,j)下移一步或者由(i,j-1)位置,右移一步得到,所以动态转移方程为:DP[i][j]=max(DP[i-1][j],DP[i][j-1])+G[i][j]。(G[i][j]表示(i,j)这个位置的人的好心程度)。
2012-08-18 11:12:50 1222 1
原创 01背包
01背包:有N件物品和一个容器为V的背包。第i件的物品重量为w[i],价值为v[i]。那么放入哪些物品后能使得背包的总价值最大。且每种物品只有一个,要么放入,要么不放入。设DP[i][j]表示前i件物品在背包容器为j的最大装载量。①、当物品总量为0时,DP[0][j]=0,当容量为0时,DP[i][0]=0;②、若当前的体积j③、否则若j>=w[i]时,有:DP[i][j]=max
2012-08-15 10:45:52 652
原创 区间动态规划
1、矩阵连乘,tyvj 1198(最优矩阵连乘),关键是写出动态转移方程。用DP[i][j]表示矩阵Ai乘到Aj的最优解,P[]用来存储矩阵的行和列,M[i-1]表示矩阵i的行,M[i]表示矩阵i的列。当i==j时,DP[i][i]=0;当i(A3A4A5A6A7A8)A9。我们知道若A矩阵为r1*c的矩阵,A2为c*r2的矩阵,得到的将是一个r1*r2的矩阵,且连乘次数为r1*c*r2。
2012-08-14 09:19:19 6444
原创 NYOJ 动态规划
题1:NYOJ 10(滑雪),前面的博文-动态规划中有。题2:NYOJ 15(括号匹配),放在区间动态规划中。题3:NYOJ 16(矩阵嵌套),大概意思给你n个矩阵,这些矩阵相互嵌套,问能够嵌套的最大个数,直接按长度从大到小排序,长度相等则按宽度从大到小排序,由于能够嵌套满足:长1DP[i]=max(DP[i],DP[j+1])(0 #include#include#inc
2012-08-14 08:47:09 2295
原创 最小费用最大流
最大流:(1)、Ford_Fulkerson算法:在任何运输网络中,最大流的流量等于最小割切的容量。割集:在一个有权图中,源点为s,汇点为t,从s到t有很多路径可以走,每条路径都包含若干条边。这些边可能只属于一条路径,也可能同时出现在两条路径中。如果拿掉这张图中的一些边,就无法从s到达t,这些边的组合就叫做割集。最小割:割集有很多,每一个割集中元素的权值之和称为割集容量。所有割集容
2012-08-12 15:48:05 758
原创 二分图的最大匹配
二分图:图G中顶点集V可以分成互不相交的子集(X,Y),并且图中的每一条边所关联的点分别属于两个不同的顶点集,则图G叫二分图,如图所示:二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配,当匹配数达到最大时为二分图的最大匹配。当然最大匹配的方案可能不能,但是最终结果都是一样。上图中最大匹配可以由(1,1),(2,2),(3
2012-08-11 09:49:21 1089
原创 Floyd算法
例题2:POJ 2570,某条道路由一些公司修建,修建道路的公司可以提供这条路上的连通,如第一个测试数据中,从1到2有a,b,c三个公司可以提供路径,现给你任意的两个地点,问有哪些公司可以提供路径。这个题的难点就是给你的字符串如何存储,我们用map[u][v]表示u到v可以由哪些公司提供路径。初始化为0,那么它的二进制的每一位都为0,用0~26的位置表示a~z是否可以提供路径,可以则设为1。如
2012-08-09 16:12:52 646
原创 并查集题目总结
有关并查集的知识可以点这里,这里知识说下题目:POJ 1611(意思是有很多人编号为0~n-1,一开始只有编号为0感染了,然后输入多组数据n,m,n是总人数,m为群体数,接着有m行,每一行最前面的一个数表示这个群体的人数,然后输入这些人的编号,在这些群体中只要有一个被感染的话这群人都会被感染,问最后有多少人被感染。)很裸的并查集,直接输出与0在同一个群体的人的个数即可,代码略。
2012-08-09 10:38:21 641
原创 牛顿迭代法
牛顿迭代法:设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x
2012-08-03 15:50:24 802
原创 计算几何求公式
例题1:POJ 1380(矩阵的包含),给你两个矩阵的长和宽,问前面这个矩阵能否包含后面这个矩阵。(1)、当前面的矩阵的宽(2)、当前面矩阵的面积(3)、当前面矩阵的长,宽>后矩阵的长,宽,能够包含。(4)、特别注意前矩阵宽>后矩阵的宽,但是长 判断只需要后面这个矩阵在水平方向上的投影之和C*cos∠2+D*sin∠2,自己认真看看,具体见代码。#include
2012-08-02 11:13:36 841
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人