- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 51Nod-1099 任务执行顺序
有N个任务需要执行,第i个任务计算时占R[i]个空间,而后会释放一部分,最后储存计算结果需要占据O[i]个空间(O[i] < R[i])。例如:执行需要5个空间,最后储存需要2个空间。给出N个任务执行和存储所需的空间,问执行所有任务最少需要多少空间。Input第1行:1个数N,表示任务的数量。(2 <= N <= 100000)第2 - N + 1行:每行2个数R[i]和O[i...
2018-02-26 15:39:04 224 1
原创 51Nod-1432 独木舟
n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?Input第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。接下来n行,每行一个正整数,表示每个人的体重。体重不超过100000000...
2018-02-25 23:30:02 120
原创 51Nod-1428 活动安排问题
有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? Input第一行一个正整数n (n <= 10000)代表活动的个数。第二行到第(n + 1)行包含n个开始时间和结束时间。开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000Output一行包含一个整数表示最少教室的个数。Input示例3...
2018-02-24 21:56:22 328
转载 二分图匹配之匈牙利算法
【书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程】匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。-------等等,看得头大?那么请看下面的版本:通过数代人的努力,你终于赶上了剩男剩女的大潮,假设...
2018-02-21 12:28:45 174
原创 HDU-3572 Task Schedule
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3572题意:有N个任务,有M个机器。每个任务必须在Si天或者以后开始做,在Ei 天或者之前完成,完成任务必须处理Pi 天。其中,每个任务可以在任意(空闲)机器上做,每个机器同一时刻只能做一个任务,每个任务同一时刻只能被一个机器做,而且任务做到一半可以打断,拿去其他机器做。问:能否在规定时间内把任务做完。...
2018-02-20 22:54:28 166
原创 STL Stack/Queue/Set常用函数
1.Stack栈 ---后进先出的值的排列 栈(stack)是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构,它按照先进后出(FILO,First In Last Out)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈也称为后进先出表。 默认基于deque容器实现。栈stack的头文件为: #inclu...
2018-02-15 17:29:14 409
原创 STL Vector容器用法
Vector向量 ---连续存储元素的数组 ——以类模板形式封装的数据结构,用于储存数据。 头文件#include<vector> vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。 vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vecto...
2018-02-15 16:53:42 233
原创 埃氏筛法、区间筛法(求素数个数)
1、埃氏筛法 给定整数n,请问n以内有多少个素数?(n≤106)思路:首先,将2到n范围内的所有整数写下来。其中最小的数字2是素数。将表中所有2的倍数都划去。表中剩余最小的数字是3,它不能被更小的素数整除,所以是素数。再将表中3的倍数都划去。以此类推,如果表中最小的数字是m时, m 就是素数。像这样反复操作,就能以此枚举n以内的素数。int pri[Max_n]; //第i个素数b...
2018-02-15 12:05:52 1783 2
原创 证明拓展欧几里德算法
拓展欧几里德定律: 对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然 存在整数对 x,y ,使得 gcd(a,b)=ax+by。证明:设 a>b。1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;2,a>b>0 时设 ax1+ by1= gcd(a,b); bx2+ (a mod b)y2= gcd(b,a mod...
2018-02-10 14:29:23 234
原创 51Nod-1091 线段的重叠
X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]。给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。Input第1行:线段的数量N(2 <= N <= 50000)。第2 - N + 1行:每行2个数,线段的起点和终点。(0 <= s ...
2018-02-08 00:15:57 170
转载 证明增广路算法的正确性
一直对增广路这种贪心思想表示怀疑,今天看到一个很好的证明~首先介绍割的概念,所谓图的割,指的是某个顶点集合S属于V,从S出发的所有边的集合成为割(S,V\S),这些边的容量和被称为割的容量,如果有源点s属于S,汇点t属于V\S,则称之为s-t割,如果将s-t割的所有边都在原图中去掉,则不再有s->t的路径。容易得到,对于任意一个s-t割,总有f的流量<=割的容量,根据平衡条件,当且仅当...
2018-02-06 01:22:32 779
原创 最大流之Dinic算法模板
Ford_Fulkerson算法是通过深度优先搜索寻找增广路,并沿着它增广。与之相对,Dinic算法总是寻找最短的增广路,并沿着它增广。因为最短增广路的长度在增广过程中始终不会变短,所以无需每次都通过宽度预先搜索来寻找最短增广路。我们可以先进行一次宽度优先搜索,然后考虑有近距离指向远距离顶点的边所组成的分成图,在上面进行深度优先搜素寻找最短增广路。如果在分层图上找不到新的增广路了,则说明最短增广路...
2018-02-06 01:09:00 221
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人