算法题共享

来源:互联网 发布:消防模拟软件 编辑:程序博客网 时间:2024/06/07 12:29

题目名(中文) 题目名(韩文) 练习日期 URL

1vjudge新手入门---B-The 3n + 1 problem09/7~09/14  https://cn.vjudge.net/contest/183035#problem/B2vjudge

算法基础(03)树和二叉树----A-小球下落  https://cn.vjudge.net/contest/183253#problem/A3 koitp

点的位置 점의 위치 09/15-09/21  https://koitp.org/problem/SDS_PRO_9_2/read/ 4 koitp

俄罗斯套娃 마트료시카 https://koitp.org/problem/SDS_PRO_8_1/read/ 5 koitp

拓扑排列 위상 정렬 https://koitp.org/problem/SDS_PRO_10_2/read/ 6vjudge

专题(三)动态规划01-----A-城市里的间谍  https://cn.vjudge.net/contest/184130#problem/A



------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间限制 存储限制 提交次数 正确次数(比率) 正确者 人数 3.0 초 512 MB 462 104 (23%) 88问题捡两次废纸当前有M * N格子构成的城市。这城市各处都有垃圾。范贤捡废纸是从最左上角的格子(1, 1)出发移动到最右下角的 (M, N) ,这时需要走最短的路径。即,只能移动到相邻的向右或向下的格子。在这里要进一步重新从 (M, N)移动到 (1, 1)再次捡废纸。这时也要走最短的路径。即,只能移动到相邻的向左或向上的格子。需要注意的是捡完一次废纸就再没有废纸了。这时,请输出范贤能收集到的废纸量的最大值。输入第一行给出测试用例个数T(1 ≤ T ≤ 20)。每个测试用例的第一行给出N, M(2 ≤ N, M ≤ 100)。下一个M行,每行给出N个字符。'*'是表示可以行走的有废纸的地方。'.'是表示可以行走,但没有废纸的地方。'#'是表示不能行走的地方。当前已确定(1, 1)和 (M, N)是可以去的地方。还有确定两点之间有路径。输出每个测试用例,通过一行输出范贤可以捡到的最多废纸量。案例输入29 7*.............**#...**...#*..####*#..*.#*.*#....#**...*........5 5.*.*.*###.*.*.*.###*.*.*.案例输出78案例补充在第一个测试用例中, 范贤到达 (M, N)位置时,城市变成如下:xxxxx........xxx#...**..x#*..####x#..*.#*.x#....#**xxx*.......xX表示范贤的移动路径。现在为止收集的废纸是5个。重新移动到 (1, 1)时,城市变成如下:yxxxx....y...xxx#.yyyyyyy#*..####y#..*.#*.y#....#**yxx*.....yyyY表示范贤的移动路径。范贤收集的总废纸量为7个,所以输出7。第二个测试用例的解,如下所示:yxxxxy###xy.*.xy###xyyyyy

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间限制 存储限制 提交次数 正确次数(比例) 正确者 人数 5.0 秒 512 MB 74 20 (27%) 15问题相邻的bit个数当前有0和1构成的数列S。S的第一个数是a1, 最后的数是an。S的相邻bit数可以按如下方式求得:a1a2 + a2a3 + a3a4 + ...利用这个公式可以求得数列S中相邻的1的个数。比如说011111101的相邻bit个数为5,11110110是4, 1010101是0。当给出数列S的长度N和K时,请求一下长度为 N的数列中,相邻的bit个数为K的数列S。输入第一行给出N和K。(0 ≤ K < N ≤ 1,000)输出第一行输出满足条件的数列S的个数除以100,000,000的余数。案例输入5 2案例输入6案例说明有11100, 01110, 00111, 10111, 11101, 11011。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间限制 存储限制 提交次数 正确次数(比例) 正确者 人数 1.0秒 512 MB 1092 205 (19%) 178问题Amoeba农部区域正在研究新发现的阿米巴虫。繁殖力很强的阿米巴虫有如下一样的特征。• 它做无性生殖。• 出生之后的第 a天会成为成体。• 成为成体的那天开始每天都会造出一只新的个体。它成为成体后立马会造出第一个个体,之后每天造出新的个体。新的个体也一样,出生之后第a天开始成为成体,然后造出新的个体。• 到了出生之后的第 b天开始,不能再造出新的个体了。出生之后的第 a天开始到 b天的前一天可以造出新的个体,所以一生总共能造出 (b−a)只个体。• 到了出生之后的第d天的那瞬间,他会死亡。如下是当 a=2,b=4,d=6时,水槽里放入一只新出生的阿米巴虫后,每天进行观察并记录的结果。括号里面的数字整数表示水槽里面的每个阿米巴虫出生后,经过的天数。• 出生的天: (0) – 放入新的个体• 第1天: (1) – 阿米巴虫生长• 第2天: (2, 0) – 阿米巴虫出生第2天会成为成体,所以会造出新的个体• 第3天: (3, 1, 0) – 成为成体第2天的阿米巴虫,今天也造出了一个新的个体。• 第4天: (4, 2, 1, 0) – 第2天造出的阿米巴虫造出了新的个体 (第一次放入的阿米巴虫不能再造出新的个体)• 第5天: (5, 3, 2, 1, 0, 0)• 第6天: (4, 3, 2, 1, 1, 0, 0) – 第一次放入的阿米巴虫会死。第6天,水槽里面活下来的阿米巴虫总共为7只。利用阿米巴虫的繁殖信息a, b, d, 请编写输出当新出生的阿米巴虫放到水槽里后,第N天活着的阿米巴虫个数除以1000后的余数的程序。输入第一行上,表示 a, b, d, N的四个整数以空格划分给出。(0


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

思路分析:

//

1.相邻的bit数假设 f(n-1,k)第n位为0,共有k个相邻比特位 g(n-1,k)第n位为1,共有k个相邻比特位那么n位里存在k个相邻比特位的总数为f(n-1,k)+g(n-1,k)f(n,k) = f(n-1,k)+g(n-1,k) 末位为0和不为0数值的总和g(n,k) = f(n-1,k)+g(n-1,k-1) 分n-1位为0和1两种情况,n-1为0则数量为f(n-1,k),n-1为1则n-1和n位都为1相乘为1,所以k需要减一位为g(n-1,k)

2.Amoeba 只用算出来,每个时间新出生的阿米巴虫,然后第i个时间出生的阿米巴虫为i-b到i-a这段时间出生的阿米巴虫的总和,因为只有这段时间出生的阿米巴虫在第i时间还具有繁殖能力。由于再求i-b到i-a这段时间出生的阿米巴虫用常规垒加可能存在效率问题,所以假设算出来i-1的值那么只用减去f(i-b)加上f(i-a)的值就ok了f(i) = f(i-1)-f(i-b)+f(i-a)捡两次废纸这个题之前看过,隐约记得思路是把返程路也看作是从起点出发的到终点的路,这样就可以同时求两条从起点出发的到终点的捡到贝壳和最大,(待补充)。

3.动态规划02 C-划分回文串总体分两步:1、算出n个字符串里可以组成回文的全部情况,比如i到j可以组成回文则D[j]设为true 这里也是需要用动态规划法,如果s.charAt(i) == s.charAt(j) && D[i+1][j-1] == true则表示是回文。2、算出最小值 同样再次用动态规划法 f(j) = min(f(j),f(i-1)+1) i[j] == true f(N)就是想要的结果若看不清文本 请点击查看文本。

/捡废纸

那个题目的几个提示:1. 假设两个人同时从起点出发来做2. 假设2个人速度相同,那么两个人同时从起点出发的话,任意时刻都满足X1+y1=x2+y2.3. dp[x1,y1,x2,y2]=(x1==y1)?A[x1][y1]:(A[x1][y1]+A[x2][y2])+max(Dp[x1-1,y1,x2-1,y2],Dp[x1-1,y1,x2,y2-1],Dp[x1,y1-1,x2-1,y1],Dp[x1,y1-1,x2,y1-1])4. 由于提示2,所以3 可以简化为3维以上~


-----------------------------------------------------------------

时间限制 存储限制 提交次数 正确次数(比率) 正确者 人数 2.0 秒 512 MB 4208 832 (20%) 683问题最长递增子数列(LIS)子数列(Subsequence)指的是某个数列上保持本身的顺序,只选择其中一部分项来构成的数列。比如说有[1,3,2,4]构成的数列,其中 [1,3,4], [1,2,4]等会成为子数列,但[1,2,3]不能成为子数列。最长递增子数列(Longest Increasing Subsequence)指的是某个数列的子数列中,各项比之前项递增的子数列。比如说给出的数列 [1,8,4,12,2,14,6] 的最长递增子数列有[1,8,12,14], [1,4,12,14]。当给出数列时,请求一下相关数列的最长递增子数列的长度。输入第一行给出数列的长度N。(1≤N≤300,000)第二行按顺序给出数列的各项的值。给出的数字是32bit整数型以内的数字。输出第一行输出,给出的数列中,最长递增数列的长度。案例输入101 1 2 2 3 3 2 2 5 5案例输出4

-------------------------------------------------------------------

时间限制 存储限制 提交次数 正确次数(比率) 正确者 人数 1.0 秒 512 MB 122 43 (35%) 38问题和分解当加0到 N的K个整数时,请编写和为N时的情况有多少种的程序。 (加法的顺序变换时,看作不同的情况(1+2和 2+1时为不同的情况。),还有一个数可以使用多次)输入第一行给出,两个整数N(1≤N≤200), K(1≤K≤200)。输出第一行输出,答案除以1,000,000,000的余数。输入案例20 2输出案例21

-------------------------------------------------------------------

时间限制 存储限制 提交次数 正确次数(比率) 正确者 人数 1.5 秒 512 MB 324 84 (26%) 72问题连接棋子N个棋子放到了x轴坐标1, 2, ..., n上。N是偶数。其中n/2个是黑色棋子,剩下的n/2个是白色棋子。连接一个黑色棋子和白色棋子弄成一双时,会有n/2个双。连接一双棋子时,会从左边的棋子开始出发垂直往上走,然后水平往右走,接着重新垂直往下走,开拓到达右边棋子的路。长成这样的 n个路不能相互重叠,也不能相互交叉。为了能让所有路的距离之和弄成最小,请编写开拓n个路的程序。 这里,距离的单位中垂直和水平都是1。 图片1的情况,可以用其他方法连接,但是上面的连接方法是最小的连接方法,距离的值为31。图片2的情况,也有其他的方法,但是上面的方法是最小的连接方法,距离的值为40。限制时间 : 1.5秒输入第一行给出表示点的个数的自然数n。n 是 400 以下的偶数。从下一行给出以n/2个0和 n/2个1构成的字符串。0是白色棋子, 1是黑色棋子。从左边开始按顺序与坐标1,2, ... , n相应。输出第一行输出,路的距离之和中的最小值。案例输入1101110100010案例输出131案例输入212111000111000案例输出240




原创粉丝点击