算法题目集
文章平均质量分 54
zp1008611
这个作者很懒,什么都没留下…
展开
-
硬币问题_动态规划
硬币问题现有若干枚硬币,硬币面值分别为1,5,11.要凑出价值为w,至少需要多少枚硬币。比如说w=15.如果按照贪心的思维:我们每次选取面值最大的硬币去尝试,15=1∗11+4∗115=1*11+4*115=1∗11+4∗1所以,凑出价值w=15,至少需要的硬币数为1+4=5枚。但是,实际上我们只需要取3枚面值为5的硬币,就可以搞定。所以,此题,贪心思维,不靠谱!分析记凑出价值n所需要的最少硬币数为f(n)f(n)f(n)那么可以得到下面这个表:可见f(n)f(n)f(n)只与f(n−原创 2021-12-30 00:04:37 · 1562 阅读 · 0 评论 -
1220_最近点对
Description对于平面上散布的 n 个点 p1, p2, …, pn, 称 d = min { || pi-pj ||, 1 ≤ i < j ≤ n } 为其最近点对距离.本题对于给定的 n 个平面点, 请计算其最近点对距离.Input有多个测试用例, 每个测试用例由两部分组成. 测试用例的第一部分是一个大于 1 且不超过 10000 的正整数 n, 第二部分是 n 对绝对值不超过 10000 的整数 xi, yi, i=1,2,…,n, 表示平面上的点的横坐标和纵坐标.输入直至没有原创 2021-12-29 00:25:20 · 166 阅读 · 0 评论 -
1218_整数因子分解
Description大于 1 的正整数 n 可以分解为: n = x1 * x2 * … * xk. 一般地, n 有很多不同的分解式. 如当 n=12 时, 共有 8 种不同的分解式:12 = 1212 = 6212 = 4312 = 3412 = 32212 = 2612 = 23212 = 223本题对于给定的正整数 n, 计算 n 共有多少种不同的分解式.Input有多个测试用例. 每个测试用例是一个大于 1 且不超过 2000000000 的整数 n. 输入直至没有数据为原创 2021-12-29 00:16:14 · 481 阅读 · 0 评论 -
1215_士兵站队
Description在一个划分成网格的操场上, n 个士兵散乱地站在网格点上. 网格点由整数坐标 (x,y) 表示. 士兵们可以沿网格边上、下、左、右移动一步, 但在同一时刻任一网格点上只能有一名士兵. 按照军官的命令, 士兵们要整齐地列成一个水平队列, 即排列成 (x,y), (x+1,y), …, (x+n-1,y). 如何选择 x 和 y 的值才能使士兵们以最少的总移动步数排成一列.本题对于给定的 n 个士兵的初始站列位置的坐标, 计算使所有士兵排成一行需要的最少移动步数.Input有多个测原创 2021-12-28 23:54:50 · 474 阅读 · 0 评论 -
1208_可重复排列
Description设 R = { r1, r2, …, rn } 是一个 n-元多重集. 试列出 R 的所有不同排列.Input有多个测试用例. 每个测试用例由一个自然数 n(n ≤ 500) 以及一个小字字母字符串组成, 表示问题中的 n-元多重集. 输入直至没有数据或者 n=0 为止.Output对于每个测试用例按字典顺序输出给定多元集的所有可重复 n-排列, 每个排列占一行. 在所有排列输出之后, 输出一行包含表示排列个数的一个整数.Sample Input4aaccSample原创 2021-12-28 23:46:16 · 3813 阅读 · 0 评论 -
1209_排列的字典序
Descriptionn 个元素 { 1, 2, …, n } 有 n! 个不同的排列. 将这 n! 个排列按字典序排列, 并编号为 0, 1, …, n!-1. 每个排列的编号为其字典序值. 例如, 当 n=3 时, 6 个不同排列的字典序值如下:字典序值 0 1 2 3 4 5排列 123 132 213 231 312 321本题对于给定的 n 以及 n 个元素 {1, 2, …, n } 的一个排列, 计算这个排列的字典序值, 以及按字典序排列的下一个排列.Input有多个测试用例. 每原创 2021-12-28 17:33:16 · 149 阅读 · 0 评论 -
1306_2^n-1 (1)
Description对于任意给定的非负整数 n, 计算 2n-1.Input有多个测试用例. 每个测试用例是一个非负整数 n. 输入直至没有数据为止.Output对于每个测试用例, 在一行上输出一个整数, 表示对应于输入的计算结果. 你可以假定这个结果在 32-bits 无符号整数范围内.注意: 输出行上不能有前导空格和后缀空格.Sample Input1234Sample Output13715分析左移运算符(<<)规则按二进制形式把所有的数字向左移动对原创 2021-12-26 17:34:20 · 228 阅读 · 0 评论 -
1243_区间相交
Description给定 x 轴上 n 个闭区间, 去掉尽可能少的闭区间, 使剩下的闭区间都不相交.本题对于给定的 n 个闭区间, 请计算去掉的最少闭区间数.Input有多个测试用例. 每个测试用例的第一行是正整数 n, 表示闭区间数. 接下来的 n 行中, 每行有两个整数, 分别表示闭区间的两个端点. 输入直至没有数据为止.Output对于每个测试用例, 在一行上输出去掉的最少闭区间数.Sample Input310 2010 1520 15Sample Output2#in原创 2021-12-26 15:26:07 · 318 阅读 · 0 评论 -
1239_删数问题
Description对于一个有 n 个数字的正整数 a, 去掉其中任意 k (≤ n) 个数字后, 剩下的数字按原次序排列组成一个新的正整数.本题对于给定的正整数 a, 请计算删去 k 个数字后得到的最小数.Input有多个测试用例. 每个测试用例的第一行是一个正整数 a, 第二行是正整数 k, 表示要从 a 中删除 k 个数字. 输入直到没有数据为止.Output对于每个测试用例, 在一行上输出得到的最小数.Sample Input178543487654321212345678原创 2021-12-26 14:37:37 · 121 阅读 · 0 评论 -
1223_多重幂计数
Description设给定 n 个变量 x1, x2, …, xn, 将这些变量依序作底和各层幂, 可得 n 重幂如下:x1x2x3...xnx_1^{x_2^{x_3^{...^{x_n}}}}x1x2x3...xn这里将上述 n 重幂看作是不确定的. 当在其中加入适当的括号后, 才能成为一个确定的 n 重幂.不同的加括号方式导致不同的 n 重幂. 例如: 当 n = 4 时, 全部 4 重幂有 5 个.本题对 n 个变量计算出有多少个不同的 n 重幂.Input有多个测试用例.原创 2021-12-26 12:53:11 · 615 阅读 · 0 评论 -
1237_区间覆盖
Description设 x1, x2, …, xn 是实直线上的 n 个点. 用固定长度的闭区间覆盖这 n 个点, 至少需要多少个这样的固定长度闭区间?本题对于实数轴上给定的 n 个点和闭区间的长度 k, 计算覆盖点集的最少区间数.Input有多个测试用例. 每个测试用例的第一行有两个正整数 n 和 k, 表示有 n 个点且固定长度闭区间的长度为 k. 接下来的一行中有 n 个整数, 表示在实数轴上 n 个点的坐标(可能相同).输入直至没有数据为止.Output对于每个测试用例, 在一行上输原创 2021-12-26 12:36:09 · 398 阅读 · 0 评论 -
1236_汽车加油
Description一辆汽车加满油后可行驶 n 公里, 旅途中有若干个加油站. 请指出应在哪些加油站停靠加油使得沿途加油次数最少.本题对于给定的正整数 n 和 k 个加油站位置, 请计算最少加油次数.Input有多个测试用例. 每个测试用例的第一行有两个正整数 n 和 k, 表示汽车加满油后可行驶 n 公里, 且旅途中有 k 个加油站. 接下来的一行中有 k+1 个整数, 其中第 i 个整数表示第 i 个加油站与第 i-1 个加油站之间的距离. 第 0 个加油站表示出发地, 第 k+1 个加油站表原创 2021-12-26 12:24:37 · 163 阅读 · 0 评论 -
1235_最优服务次序
Description设有 n 个顾客同时等待一项服务, 顾客 i 需要的服务时间为 ti, (1 ≤ i ≤ n). 应如何安排 n 个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是 n 个顾客等待服务时间的总和除以 n.对于给定的 n 个顾客需要的服务时间, 请计算最优服务次序.Input有多个测试用例. 每个测试用例的第一行是正整数 n, 表示有 n 个顾客, 接下来的一行中有 n 个正整数, 表示 n 个顾客需要的服务时间.输入直至没有数据为止.Output对于每个测试用例原创 2021-12-26 00:50:03 · 62 阅读 · 0 评论 -
1234_最优合并
Description给定 k 个升序序列 s1, s2, …, sk, 用 2 路合并算法将这 k 个序列合并成一个升序序列. 假设所采用的 2 路合并算法合并 2 个长度分别为 m 和 n 的序列需要 m + n -1 次比较.本题要求对于给定的 k 个待合并序列, 试计算合并这个序列的最优合并顺序所需的总比较次数最差合并顺序所需的总比较次数.Input有多个测试用例. 每个测试用例的第一行有一个正整数 k, 表示有 k 个待合并序列. 接下来的一行中有 k 个正整数, 表示 k 个待合并序列的原创 2021-12-26 00:38:42 · 113 阅读 · 0 评论 -
区间DP_石子合并
石子合并设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第二步原创 2021-12-22 15:42:01 · 82 阅读 · 0 评论 -
1222_序关系计数
Description用关系 “<” 和 “=” 将 3 个数 A、B 和 C 依序排列时有13 种不同的序关系:A = B = C, A = B < C, A < B = C, A < B < C, A < C < B, A = C < B, B < A = C, B < A < C, B < C < A, B = C < A, C < A = B, C < A < B, C < B <原创 2021-12-22 10:48:06 · 148 阅读 · 0 评论 -
1219_逆序数
Description对于 { 1, 2, …, n } 的一个排列 a1, a2, …, an, 如果 ai > aj, i < j, 则称 (ai,aj) 为此排列的一个逆序. 一个排列的所有逆序的个数称为此排列的逆序数.本题对于任意给定的一个 n-排列, 请计算其逆序数.Input有多个测试用例. 每个测试用由两行组成, 其中第一行为一个不超过 104 的正整数 n, 第二行为 n 个正整数, 表示 1, 2, …, n 的一个排列.输入直至没有数据为止.Output对于每个原创 2021-12-21 12:54:26 · 234 阅读 · 0 评论 -
归并排序C++
void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid); merge_sort(q, mid + 1, r); int k = 0, i = l, j = mid + 1; while (i <= mid && j <= r) if (q[i.原创 2021-12-20 21:19:37 · 661 阅读 · 0 评论 -
1216_集合划分 (1)
Descriptionn 个元素的集合 A = { a1, a2, …, an } 的一个分划是指 A 的一个子集族 { S1, …, Sk | Si 是 A 的非空子集, i=1,…,k 且 Si ∩ Sj = ∅, 1 ≤ i < j ≤ k }. A 的所有分划的个数称为 A 的分划数. 不难证明所有元素个数相同的集合具有相同的分划数. 记为 p(n) 为 n-元集的分划数. 例如, N(4) = { 1, 2, 3, 4 } 有 15 个不同的划分如下:{ {1}, {2}, {3}, {原创 2021-12-19 16:45:25 · 511 阅读 · 0 评论 -
1206_半数集(1)
Description一个自然数 n 的一个半数展开是指自然数序列 { a1, a2, …, ak-1, ak }, 其中 ak = n, 2*ai ≤ ai+1, i = 1, 2, …, k-1. 如: n = 24, 那么 { 1, 3, 6, 12, 24 } 和 { 1, 2, 24 } 都是 24 的一个半数展开. 将 n 的一个半数展开序列由后往前取第 i(i=1 ,…, k-1) 项到第 k 项头尾连结将得到一个新的序列, 称之为 n 的一个半数添加序列. 如由 24 的半数展开序列 {原创 2021-12-10 11:28:44 · 498 阅读 · 0 评论 -
hdu 4091 整数规划
Problem DescriptionSome brave warriors come to a lost village. They are very lucky and find a lot of treasures and a big treasure chest, but with angry zombies.The warriors are so brave that they decide to defeat the zombies and then bring all the treasu原创 2021-12-01 16:28:47 · 84 阅读 · 0 评论 -
单纯形法C++模板
单纯形法C++模板/*测试数据:2 1 11 21 2 100*****************2 1 134 334 5 100*****************2 3 134 334 5 1001 0 20 1 6*/#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;const int M原创 2021-12-01 16:25:16 · 297 阅读 · 1 评论 -
1244_任务时间表
Description一个单位时间任务是恰好需要一个单位时间完成的任务. 给定一个单位时间任务的有限集S, 关于 S 的一个时间表用于描述 S 中单位时间任务的执行次序, 时间表中第一个任务从时间 0 开始执行直至时间 1 结束, 第二个任务从时间 1 开始执行至时间 2 结束, …, 第 n 个任务从时间 n-1 开始执行直至时间 n 结束. 具有截止时间和误时惩罚的单位时间任务时间表问题可描述如下:nnn 个单位时间任务的集合 S={1,2,…,n}S = \{ 1, 2, …, n \}S={原创 2021-11-29 16:26:10 · 341 阅读 · 0 评论 -
1252_0-1背包问题
题目描述一个旅行者有一个最多能装MMM公斤的背包,现在有nnn件物品,它们的重量分别是W1,W2,...,WnW_1,W_2,...,W_nW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC_1,C_2,...,C_nC1,C2,...,Cn,求旅行者能获得最大总价值。输入第一行:两个整数,MMM(背包容量,M≤200M\leq200M≤200)和NNN(物品数量,N≤30)N\leq30)N≤30)输入样例10 42 13 34 57 9输出样例12原创 2021-11-19 10:45:47 · 190 阅读 · 0 评论 -
1233_会场安排
Description要在足够多的会场里安排一批活动, 并希望使用尽可能少的会场. 这个问题实际上是著名的图着色问题. 若将每一个活动作为图的一个顶点, 不相容活动间用边相连, 使相邻顶点着有不同颜色的最小着色数, 相应于要找的最小会场数.对于给定的 k 个待安排的活动, 计算使用最少会场的时间表.Input有多个测试用例. 每个测试用例的第一行是有一个正整数 k, 表示有 k 个待安排的活动. 接下来的 k 行中, 每行有两个正整数, 分别表示 k 个待安排的活动开始时间和结束时间. 时间以 0原创 2021-11-17 16:09:34 · 62 阅读 · 0 评论 -
1205_众数及其重数
Description一个集合如果允许存在相同的元素,则称之为多重集合. 多重集 S 中的元素 x 如果恰好在 S 中出现 r 次, 则称 x 是 r 重的, 也称 r 为 x 的重数. 重数最大的元素称为众数. 例如, S = { 1,2,2,2,3,5 } 的众数是 2, 其重数为 3.本题对于给定的由 n 个自然数组成的多重集 S, 编程计算 S 的众数及其重数.Input有多个测试用例. 每个测试用例包含若干由空白符分隔的正整数. 用例第一个正整数 n (n ≤ 107) 表示多重集 S 的原创 2021-11-14 18:24:14 · 372 阅读 · 0 评论 -
1201_字典序问题(1)
题目Description在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 A 由26 个小写英文字母组成 A = { a,b,…,z }。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1 次。例如:a,b,ab,bc,xyz 等字符串都是升序字符串。现在对字母表 A 产生的所有长度不超过 6 的升序字符串按照字典序排列并编码如下:1 2 … 26 27 28 …a b … z ab ac …本题对于给定的长度不超过原创 2021-11-14 16:57:33 · 396 阅读 · 0 评论 -
1200_统计数字问题
题目Description一本书的页码从自然数 1 开始顺序编码直到自然数 n. 书的页码按照通常的习惯编排, 每个页码都不含多余的前导数字 0. 例如, 第 6 页用数字 6 表示,而不是 06 或 006 等。数字计数问题要求对给定书的总页码 n, 计算出书的全部页码中分别用到多少次数字 0,1,2,…,90,1, 2,…,90,1,2,…,9。本题对于给定表示书的总页码的 10 进制整数 n(1≤n≤109)n (1 ≤ n ≤ 10^9)n(1≤n≤109) 。编程计算书的全部页码中分别用到多原创 2021-11-13 00:56:33 · 307 阅读 · 0 评论 -
POJ1113(凸包模板题)
POJ1113这道题只要求出多边形凸包的周长再加上L为半径的圆的周长即可下面AC代码:用分治法有一个不好地方就是最后输出的凸包顶点数组,凸包顶点的顺序既不是顺时针也不是逆时针,所以对于后续的求周长,还要重新让凸包顶点的顺序变成顺时针或者逆时针,如果后面我学到其他的凸包算法再回来补这道题。#include<vector>#include<math.h>#include<algorithm>#include<iostream>#include原创 2021-10-13 14:40:39 · 260 阅读 · 0 评论