算法分析与设计
算法分析与设计的习题相关代码
yanhua_tj
这个作者很懒,什么都没留下…
展开
-
算法:骨牌铺方格(递推)
算法:骨牌铺方格(递推)Description在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图: Input输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0< n<=50)。Output对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。Sample Input132Sample Output132HINT此题用l原创 2020-11-11 23:43:03 · 803 阅读 · 0 评论 -
今年暑假不AC(贪心)
今年暑假不AC(贪心)今年暑假不ACDescription“今年暑假不AC?”“是的。”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%…”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗原创 2020-11-11 23:18:03 · 259 阅读 · 0 评论 -
会场安排问题(贪心 两种方法)
会场安排问题(贪心)Description假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。) 对于给定的k个待安排的活动,计算使用最少会场的时间表。Input输入数据的第一行有1 个正整数k(k≤10000),表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动开始时间和结束时原创 2020-11-07 00:31:59 · 9232 阅读 · 0 评论 -
整数因子分解问题(递归分治法、动态规划)
Description大于1的正整数n可以分解为:n=x1 * x2 * … * xm。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6 * 2; 12=4 * 3; 12=3 * 4; 12=3 * 2 * 2; 12=2 * 6; 12=2 * 3 * 2; 12=2 * 2 * 3。 对于给定的正整数n,计算n共有多少种不同的分解式。Input输入数据只有一行,有1个正整数n (1≤n≤2000000000)。Output将计算出的不同的分解式数输出。Sample原创 2020-11-06 01:26:05 · 10670 阅读 · 1 评论 -
背包问题(动态规划 C/C++)
Description卖方:这件商品14元买方:给你20元卖方:不好意思,我的零钱不够买方:好吧,这是15元,剩的当小费当到一个地方旅游时,如果你买东西的地方不支持信用,带零钱还是非常有用的。特别是有时候卖方没有零钱,如果你没有刚好的钱,你需要支付比卖价多一点。当然你想付尽量少的钱(至少是商品价值的钱)。并且,当支付最少钱的时候,也最好是支付的硬币的数量最少。Input第一行包含一个整数表示测试数据的组数。每组测试数据每一行包含一个整数,表示你需要付的钱数,钱数不超过10000元。接下来包含原创 2020-10-31 21:17:58 · 1446 阅读 · 0 评论 -
划分问题(Java 动态规划)
Description给定一个正整数的集合A={a1,a2,….,an},是否可以将其分割成两个子集合,使两个子集合的数加起来的和相等。例A = { 1, 3, 8, 4, 10} 可以分割:{1, 8, 4} 及 {3, 10}Input第一行集合元素个数n n <=300 第二行n个整数Output如果能划分成两个集合,输出任意一个子集,否则输出“no”Sample Input51 3 8 4 10Sample Output3 10一开始t[i][j]都为false递原创 2020-10-19 23:32:20 · 951 阅读 · 0 评论 -
算法:Common Subsequence(动态规划 Java 最长子序列)
DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, …, xm > another sequence Z = < z1, z2, …, zk > is a subsequence of X if there exists a strictly incr原创 2020-10-07 22:52:25 · 254 阅读 · 0 评论 -
算法:矩阵连乘(Java)动态规划
Description给你2个矩阵A、B,我们使用标准的矩阵相乘定义C=AB如下:A数组中栏(column)的数目一定要等于B数组中列(row)的数目才可以做此2数组的相乘。若我们以rows(A),columns(A)分 别代表A数组中列及栏的数目,要计算C数组共需要的乘法的数目为:rows(A)*columns(B)*columns(A)。例如:A数组是一个 10x20的矩阵,B数组是个20x15的矩阵,那么要算出C数组需要做101520,也就是3000次乘法。 要计算超过2个以上的矩阵相乘就得决原创 2020-10-06 23:28:52 · 929 阅读 · 0 评论 -
算法:线性时间选择(C/C++)
Description给定线性序集中n个元素和一个整数k,n<=2000000,1<=k<=n,要求找出这n个元素中第k小的数。Input第一行有两个正整数n,k.接下来是n个整数(0<=ai<=1e9)。Output输出第k小的数Sample Input6 31 3 5 2 4 6Sample Output3利用快速排序可以找出第k小的,加上随机函数改进一下:AC代码:#include <cstdio>#include <c原创 2020-09-27 22:26:44 · 7981 阅读 · 1 评论 -
sort(hdu oj 1425)计数排序和快速排序
Description给你n个整数,请按从大到小的顺序输出其中前m大的数。Input每组测试数据有两行,第一行有两个数n,m(0 < n,m < 1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。Output对每组测试数据按从大到小的顺序输出前m大的数。Sample Input5 33 -35 92 213 -644Sample Output213 92 3emm一开始呢,用快速排序找前m大的数一提交,超时……淦后来度娘原创 2020-09-22 00:28:13 · 333 阅读 · 0 评论 -
快速排序(递归和分治)
算法思想先通过一个函数,标记第一个元素为基准元素,然后分为左边都是大于基准元素的右边都是小于基准元素的然后使用排序函数分别对左半段和右半段进行排序时间复杂度最坏情况:O(n2)O(n^2)O(n2)最好情况:O(nlog2n)O(nlog_2n)O(nlog2n)平均情况:O(nlog2n)O(nlog_2n)O(nlog2n)动态演示图图片来源C/C++代码实现#include <cstdio>#include <cstdlib>void qui原创 2020-09-21 13:23:06 · 333 阅读 · 0 评论 -
a^b(取模运算)
Description对于任意两个正整数a,b(0 <= a, b < 10000)计算ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。Input输入有多组数据,每组只有一行,包含两个正整数a,b。最后一组a=0,b=0表示输入结束,不需要处理。Output对于每组输入数据,输出ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。Sample Input2 35 70 0Sample Output85用到的知识点(a+b)%mod=((a%m原创 2020-09-20 17:55:26 · 2487 阅读 · 0 评论 -
To the Max(动态规划)
DescriptionGiven a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In this原创 2020-09-20 00:02:29 · 734 阅读 · 0 评论 -
最大子段和问题(C/C++)
Description给定有n个整数(可能为负整数)组成的序列a1, a2, …, an,求该序列连续的子段和的最大值。 如果该子段的所有元素和是负整数时定义其最大子段和为0。Input第一行有一个正整数n(n<1000),后面跟n个整数,绝对值都小于10000。直到文件结束。Output输出它的最大子段和。Sample Input6 -2 11 -4 13 -5 -2Sample Output20参考链接: 最大字段和详解穷举法时间复杂度:O(n3)O(n^3)O(n原创 2020-09-19 19:03:58 · 5853 阅读 · 1 评论 -
最多约数问题(Java)
Description正整数x 的约数是能整除x 的正整数。正整数x的约数个数记为div(x)。例如,1,2,5,10 都是正整数10的约数,且div(10)=4。设a 和b是2 个正整数,a≤b,找出a 和b之间约数个数最多的数x。对于给定的2 个正整数a≤b,计算a 和b之间约数个数最多的数。Input输入数据的第1行有2个正整数a和 b,a≤1000000000,b≤1000000000。Output若找到的a 和b之间约数个数最多的数是x,将div(x)输出。Sample Input1原创 2020-09-18 00:28:29 · 394 阅读 · 1 评论 -
统计数字问题(Java)
统计数字问题(Java)Description一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。给定表示书的总页码的10 进制整数n (1≤n≤10^9) 。计算书的全部页码中分别用到多少次数字0,1,2,…,9。Input输入数据只有1 行,给出表示书的总页码的整数n。Output输出原创 2020-09-07 22:41:28 · 1007 阅读 · 0 评论 -
字典序问题(Java)
Description在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由 26 个小写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表A 产生的所有长度不超过6 的升序字符串按照字典序排列并编码如下。对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。对于给定的长度不超过6 的升序字符串,计原创 2020-09-12 21:50:21 · 447 阅读 · 0 评论