随笔分类 - 分治法
8. 最大子列和
摘要:问题描述:对给定数组A,寻找A的和最大的非空连续子数组。 输入格式:输入的第一行包括一个整数n,代表数组中的元素个数,接下来的一行包含n个整数(可以包含负数),以空格分隔。 输出格式:一个整数,表示最大的连续子数组的和。 样例输入: 9 2 4 -7 5 2 -1 2 -4 3 样例输出: 8 思路
7. 输油管道问题
摘要:问题描述:某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n 口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n口油井的位置,即它们的x 坐标(东西向)和y 坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的
6. 循环赛日程表
摘要:问题描述: 设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:每个选手必须与其他n-1个选手各赛一次,每个选手一天只能赛一次,循环赛一共进行n-1天。 输出样例: 81 2 3 4 5 6 7 82 1 4 3 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8
5. 逆序对数
摘要:问题: 给一列数<a1,a2,......,an>,求它的逆序对,即有多少个有序对(i.j),使得i<j且ai<aj; n 可以高达106 可以采用归并排序的思路 首先将原问题可以分解为两个子问题:对原序列从中间一分为二,分解为两个子序列A,B两个子问题可以分别递归求解,求得的逆序数分别是na和nb
4. 归并排序和快速排序
摘要:1.递归形式的归并排序 #include<iostream> using namespace std; int n; int *a; void merge(int l, int mid, int r, int *b){ int i = l, j = mid + 1, k = 0; while (i
3.病毒分裂
摘要:【问题描述】 A学校的实验室新研制出了一种十分厉害的病毒。由于这种病毒太难以人工制造了,所以专家们在一开始只做出了一个这样的病毒。 这个病毒被植入了特殊的微型芯片,使其可以具有一些可编程的特殊性能。最重要的一个性能就是,专家们可以自行设定病毒的分裂能力 K,假如现在有x 个病毒,下一个分裂周期将会有
2. 大整数乘法
摘要:问题描述 求两个不超过200位的非负整数的积。 输入形式 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出形式 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入 1234567890 9876543210 样例输出 1219
1.单峰序列
摘要:问题描述 给定含有n个不同整数的数组L=<a1,a2,......,an>,如果L中存在ai,使得a1<a2<......<ai-1<ai>ai+1>…>an。则称L是单峰的,并称ai是L的“峰顶”。假设L是单峰的,设计一个算法,找L的峰顶。 输入形式 一共包括两行,第一行一个整数N,表示数组中整数