![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 69
无敌大饺子
这个作者很懒,什么都没留下…
展开
-
UVA 551
栈的应用 括号匹配 #include #include #include #include #include using namespace std; char buf[3100]; int tb[6000]; bool isCloseBracket(char ch){ return ch==')'||ch==']'||ch=='}'||ch=='>'; } void ini原创 2013-03-11 20:43:57 · 807 阅读 · 0 评论 -
DP求两个字符串的编辑距离
给出两个字符串代表源串和目标串,可以对源串执行插入一个字符到任意位置,删除任意位置上的一个字符,替换任意位置上一个字符等3中操作,求最少需要执行多少次这样的步骤. 如: AGCTAAGGCCTT AGCTAAGGCCT 只需要在最后插入一个T就可以了. 再如: snowy sunny 最少需要3步:插入一个u,把o替换成n,删除w. 可以用dp[i][j]表示源串原创 2013-07-06 00:18:02 · 738 阅读 · 0 评论 -
ZOJ 1141 Closest Common Ancestors(LCA)
题目n的范围没说,格式坑人 再次膜拜tarjan #include #include #include #include #include using namespace std; const int maxn=900; int res[maxn],id[maxn],size[maxn],anc[maxn],vis[maxn],ind[maxn],n,q; vectorg[ma原创 2013-04-21 21:38:33 · 443 阅读 · 0 评论 -
ZOJ 3230 Solving the Problems(优先队列)
首先对每项按照ai排序.然后优先队列一顿下来就可以了. #include #include #include #include #include #include using namespace std; const int maxn=100010; int N,M,P; struct node{ int a,b; bool operator<(const node &rhs)c原创 2013-04-19 13:37:24 · 467 阅读 · 0 评论 -
ZOJ 2723 Semi-Prime
筛选法素数打表 #include #include #include using namespace std; const int maxn=1000010; bool isP[maxn]; int n; void init(){ for(int i=2;i<maxn;++i){ isP[i]=1; } for(int i=2;i<maxn;++i){ if(isP[i]){原创 2013-04-17 17:46:47 · 483 阅读 · 0 评论 -
UVA 11553 - Grid Game
预先求出出使得Alice获利最小的Bob列序列,然后对于Alice选择的每一行,对应Bob选择的那一列 #include #include #include #include #include using namespace std; #define MAX 10 int grid[MAX][MAX],n; int main(){ int t; scanf("%d",&t);原创 2013-03-23 20:53:53 · 874 阅读 · 0 评论 -
UVA 10973 - Triangle Counting
一直TLE,看了报告才写出来 方法如下: for x=1..n, adj[x] is the set { y: y>x and (x,y) is in E }. w[1..n] is an array of integers, initially filled with zeroes count = 0 for x = 1 to n: for each y in adj[x]原创 2013-03-23 16:50:05 · 979 阅读 · 0 评论 -
SPFA算法详解
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。 算法思想:我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是转载 2013-04-07 09:59:52 · 746 阅读 · 0 评论 -
UVA 11078 - Open Credit System
O2的算法会超时 可以这样: 让maxv为到目前为止的分数最大值,如果maxv-当前分数>ans,则ans=maxv-当前分数. 最后再来一次扫描两个相邻之间的最大差值,避免完全递增或者相等的情况,因为如果是完全递增或者相等的情况话每次maxv都会被更新为当前分数,差值就会为0 #include #include #include #include using namespac原创 2013-03-21 11:18:31 · 508 阅读 · 0 评论 -
最大连续子序列乘积
转自:http://blog.csdn.net/ssjhust123/article/details/8035815 问题描述 给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为720,即3*(-4)*(-5)*6=720。 分析 求最大连续子序列乘积与最大转载 2013-03-20 15:31:16 · 579 阅读 · 0 评论 -
HDU 1166 敌兵布阵(线段树)
第一道线段树的题目,正在学习中 #include #include #include using namespace std; #define MAX 55555 int sum[MAX<<2],n; void pushUp(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1]; } void build(int l,int r,int rt){ if(l原创 2013-04-01 08:05:03 · 576 阅读 · 0 评论 -
UVA 247 - Calling Circles(tarjan 强连通算法)
tarjan算法参考:http://kmplayer.iteye.com/blog/604532 #include #include #include #include #include #include #include using namespace std; #define MAX 30 int dfn[MAX],low[MAX],instak[MAX],idx,n,m; c原创 2013-03-28 22:15:58 · 995 阅读 · 0 评论 -
筛选法打印素数表
void init(){ for (int i=0;i<20000000;++i)isP[i]=1; for (int i=2;i<=18409201;++i) { if(isP[i]){ table.push_back(i); for (int j=2;j*i<=18409201;j++)isP[j*i]=0; } } }原创 2013-03-28 12:07:18 · 585 阅读 · 0 评论 -
LCA的tarjan算法的理解
转自 http://scturtle.is-programmer.com/posts/30055.html tarjan算法的步骤是(当dfs到节点u时): 1 在并查集中建立仅有u的集合,设置该集合的祖先为u 1 对u的每个孩子v: 1.1 tarjan之 1.2 合并v到父节点u的集合,确保集合的祖先是u 2 设置u为已遍历 3 处理关于u的查询,若查询(u,v转载 2013-02-28 11:06:22 · 506 阅读 · 0 评论 -
ZOJ 1015 弦图的判断
转: 定义: 无向图中,如果任意边数大于3的环,至少存在一条边连接环中不相邻的某两 个点,则称此图为弦图(Chordal Graph)。 zoj1015的题目: 判断无向图是否为弦图,是则输出Perfect,否则输出Imperfect。 以下是时间复杂度为O(n+m)的算法,n是图的点数,m是图的边数。 第一步:给节点编号 设已编号的节点集合为A,未编号的节点原创 2013-03-13 07:33:01 · 608 阅读 · 0 评论