算法
文章平均质量分 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 · 866 阅读 · 0 评论 -
DP求两个字符串的编辑距离
给出两个字符串代表源串和目标串,可以对源串执行插入一个字符到任意位置,删除任意位置上的一个字符,替换任意位置上一个字符等3中操作,求最少需要执行多少次这样的步骤.如:AGCTAAGGCCTTAGCTAAGGCCT只需要在最后插入一个T就可以了.再如:snowysunny最少需要3步:插入一个u,把o替换成n,删除w.可以用dp[i][j]表示源串原创 2013-07-06 00:18:02 · 785 阅读 · 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 · 501 阅读 · 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 · 502 阅读 · 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 · 525 阅读 · 0 评论 -
UVA 11553 - Grid Game
预先求出出使得Alice获利最小的Bob列序列,然后对于Alice选择的每一行,对应Bob选择的那一列#include #include #include #include #include using namespace std;#define MAX 10int grid[MAX][MAX],n;int main(){ int t; scanf("%d",&t);原创 2013-03-23 20:53:53 · 934 阅读 · 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 zeroescount = 0for x = 1 to n: for each y in adj[x]原创 2013-03-23 16:50:05 · 1040 阅读 · 0 评论 -
SPFA算法详解
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。算法思想:我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是转载 2013-04-07 09:59:52 · 799 阅读 · 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 · 548 阅读 · 0 评论 -
最大连续子序列乘积
转自:http://blog.youkuaiyun.com/ssjhust123/article/details/8035815问题描述给定一个整数序列(可能有正数,0和负数),求它的一个最大连续子序列乘积。比如给定数组a={3, -4, -5, 6, -2},则最大连续子序列乘积为720,即3*(-4)*(-5)*6=720。分析求最大连续子序列乘积与最大转载 2013-03-20 15:31:16 · 640 阅读 · 0 评论 -
HDU 1166 敌兵布阵(线段树)
第一道线段树的题目,正在学习中#include #include #include using namespace std;#define MAX 55555int 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 · 619 阅读 · 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 30int dfn[MAX],low[MAX],instak[MAX],idx,n,m;c原创 2013-03-28 22:15:58 · 1044 阅读 · 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 · 626 阅读 · 0 评论 -
LCA的tarjan算法的理解
转自 http://scturtle.is-programmer.com/posts/30055.htmltarjan算法的步骤是(当dfs到节点u时):1 在并查集中建立仅有u的集合,设置该集合的祖先为u1 对u的每个孩子v: 1.1 tarjan之 1.2 合并v到父节点u的集合,确保集合的祖先是u2 设置u为已遍历3 处理关于u的查询,若查询(u,v转载 2013-02-28 11:06:22 · 573 阅读 · 0 评论 -
ZOJ 1015 弦图的判断
转:定义: 无向图中,如果任意边数大于3的环,至少存在一条边连接环中不相邻的某两 个点,则称此图为弦图(Chordal Graph)。 zoj1015的题目: 判断无向图是否为弦图,是则输出Perfect,否则输出Imperfect。 以下是时间复杂度为O(n+m)的算法,n是图的点数,m是图的边数。 第一步:给节点编号 设已编号的节点集合为A,未编号的节点原创 2013-03-13 07:33:01 · 666 阅读 · 0 评论
分享