ACM / ICPC
HappyBabyMe
这个作者很懒,什么都没留下…
展开
-
istringstream用法
istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。#include<iostream>#include<sstream>using namespace std;int main(){ string str, line; while(getline(cin, line)) { istringstream stream(line); wh...原创 2008-07-11 21:57:27 · 374 阅读 · 0 评论 -
筛选法求素数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 251不算遍历一遍,删掉2的倍数:得2 3 5 7 9 11 13 15 17 19 21 23 25遍历一遍,删掉3的倍数:得2 3 5 7 11 13 17 19 23 25遍历一遍,删掉5的倍数:得2 3 5 7 11 13 17 19 23...........2008-05-09 02:11:28 · 182 阅读 · 0 评论 -
有向图的极大强连通分量算法
1. 对有向图G进行DFS,记录时间戳Ai,形成森林W12. 将G中所有边反向形成G'3.按时间戳由大到小对G'进行DFS,形成新森林W2.由此,形成的每棵树都是一个极大强连通子图。...2008-05-09 02:08:12 · 338 阅读 · 0 评论 -
最短路径算法
单源最短路径:1. Dijkstra 复杂度取决于优先队列如何实现,平均是O(v^2)思路:S初始为空,所有结点V放入Qwhile(Q不空) u=Q中取最小(指距离源点距离最小) u并入S for(u的每个邻接点v) relax(); //松驰,能小就小,咱找最短路径嘛2. Bellman-Ford ...2008-05-09 02:05:40 · 171 阅读 · 0 评论 -
最小生成树 MST
1. Kruskal O(ElgV)思路:每个顶点是个集合,形成森林;边排序;每次取权最小的边u-v,若u.v不在同一集合,则Union()用到了最小堆/优先队列、并查集2. Prim O(ElgV)思路: 从一个结点u出发(u放进集合S中),找连出去的最短边u-v,找到后将v放进S,找所有S中结点连出去的最短边,直到所以结点归入集合S用到了最小堆/优先队列...2008-05-09 01:53:27 · 254 阅读 · 0 评论 -
最大子段和 O(n)求解
设置一个 max=0; //其用来记录非负最大值对于以下序列:5 -6 2 4 -1 8i i i i i i i=0时, max=5;i=1, max=5 (因为5-6=-1, -1<5,所以不更新。当sum为负时,sum=0);i=2, max=5 (2<5, 不更新max)i=3, max=6 (6>5)i=4, max=6 i=5, ...2008-05-09 01:45:17 · 307 阅读 · 0 评论 -
最长递增子序列
if( a[i] > a[j] ) dp[i] = max{dp[j] + 1} 1<=j<i //对于每一位i,考查其前找个最大的dp[j],那么因为a[i]>a[j]所以再加一就OK2008-05-09 01:36:39 · 138 阅读 · 0 评论 -
最长公共子序列 LCS DP
一个会“记忆”的矩阵:c[i, j] = 0 //if(i=0||j=0) c[i-1, j-1]+1 //if(xi=yj) max{c[i, j-1], c[i-1, j]} //if(xi!=yj)...2008-05-09 01:33:42 · 144 阅读 · 0 评论 -
N结点二叉树中M个结点的连通子图个数
[b]给定一棵有N个结点的二叉树。求它的所有结点数为M的连通子图数目。[/b]设以n为根的结点数为m的连通子图数目 dp[n][m]dp[n][m] = dp[2n][m-1] //左孩子+dp[2n+1][m-1] //右孩子+SUM { dp[2n][i] * dp[2n+1][m-1-i]} //1...2008-04-16 21:31:07 · 419 阅读 · 0 评论 -
主定理
请参看附件图片2008-04-16 18:01:46 · 296 阅读 · 0 评论 -
排序算法—史上最全
http://baike.baidu.com/view/297739.htmlhttp://bbs.51cto.com/archiver/tid-431822.html过两天再整理,会很全地~~1. heapsort O(nlgn) O(nlgn) O(nlgn)建堆 O(nlgn);heapify O(lgn);heapsort O(nlgn);2...2008-04-16 16:37:09 · 138 阅读 · 0 评论 -
从n到m中出现多少个1
1. f(n, m): N到M中出现多少个1。2. g(x): 1到x中出现多少个1。则f(n, m) = g(m) - g(n - 1)3. h(x, y): x在y位上出现多少个1。g(x) = h(x, 1) + h(x, 2) .... h(x, n) [b]每10个数会在个位出现1个1、每100个数会在十位出现10个1...[/b]sample inp...2008-04-16 15:41:14 · 139 阅读 · 0 评论 -
Joseph—约瑟夫环 线性复杂度
说有n个要被处决的人(编号0~(n-1)),从0开始报数,报到(m-1)的会被杀掉,剩下的人继续从0开始报数,如此下去最后剩的一个人会存活下来。说Joseph发现了这个规律而且把他透露了出来,现在假如你在这n个人里面,你会选择几号位置站下。 很显然你会选择能活下来的那个位置,所以问题就是如何得到这个位置。 首先想到的是模拟(至少我笨脑子是这么想的),但无论是用链表还是用...2008-04-16 14:59:52 · 173 阅读 · 0 评论 -
0-1背包—DP、暴力、贪心
最简单地:v是空间,w是价值,要求总价值最大dp[v] = max {dp[v-v[i]] + w[i]};//自顶向下; //自底向上 1. /********************************************************** 2. * ...2008-04-16 10:48:29 · 102 阅读 · 0 评论 -
整数划分
#include using namespace std; int q(int n,int m) //n划分的最大整数n12008-04-16 10:20:46 · 114 阅读 · 0 评论 -
最小路径覆盖
给n个自然数,要求穿在尽量少的柱子上,条件是i+j是个完全平方数。这是二分图问题,X集合为1...n, Y集合也为1...n。那么如果该二分图的最大匹配数为m,则结果就是n-m.因为:路径覆盖中每个简单路径除最后一结点外都有唯一后继和它对应,因此匹配数就是非路径结尾的结点数。所以说匹配数最大,就是说非结尾点最多,由于总数为n,那么结尾数就最少喽,正好对应了柱子数啊!!!...2008-05-09 02:15:57 · 164 阅读 · 0 评论