刷题小记:
第一题怀疑测试样例不完整,贪心法不应该能够解决该题。第二题使用0-1BFS解决单源最短路径的问题,往往搭配双端队列实现。第三题是运用动态规划解决最大不重叠子区间个数的问题,难点在于满足3重判断规则,所需数据结构及相关操作较多。
1.最小测试用例集覆盖
题目分析:
题目描述:
二维cases表示测试用例的覆盖情况,cases[i][j]为 1 表示第i个测试用例覆盖了第j个模块,为 0 则表示未覆盖。
求一个最小的测试用例集合,使得该集合能够覆盖所有模块。
返回该最小的集合大小,如果不存在这样的集合,返回-1。
输入描述:
第一行给定两个整数,分别表示用例总数n和代码模块总数m
第二行开始的n行,每行有m个整数(0或1),表示覆盖情况。
n,m均属于[1,50]区间
输出描述:
输出一个整数表示最小用例集合的大小,若不存在则输出-1
解题思路:
当且仅当 存在j,对任意的i,均有cases[i][j] == 0时,不存在最小覆盖集合,此时返回-1。
第i行表示第i个测试用例对m个模块的覆盖情况,
用一个长度为m的数组mo记录样例集合对模块的覆盖情况,其值为每一列由各样例的对应列取并得到。
如果采用回溯法(暴力搜索),那么遍历全部覆盖集的时间复杂度为O(2^n),而检查数组mo的时间复杂度为O(n),那么总的时间复杂度为O(n * 2^n),太大!
如果采用贪心法,每次选择覆盖模块最多的测试样例添入集合,仍然无法保证测试样例集合最小。(据说真实考试情况下,该贪心法过了?!)
2.小慕的地铁大挑战
题目分析:
题目描述:
有N条地铁线路,每条线路按顺序连接若干站点,且一条线路上不存在重复的站点名。
地铁乘坐规则如下:进入任意一条地铁线路需支付2元,每换乘一次加收1元。
现求小慕从某个出发站前往指定的目的站,规划一条最省钱的路线并返回最低票价;若不能抵达,输出"NA"。
输入描述:
第一行一个整数N表示地铁线路数量,介于[1,1000]。
接下来N行,每行描述一条地铁线路,用空格分隔若干个站点名(站点名长度不超过100个字符),最多包含100个站点。不同线路间站点名可能重复,表示是换乘站。
第N+1行包含两个站点名,分别是出发站和目的站。
输入保证:若存在可达路径,则方案唯一。
输出描述:
第一行输出“换乘路径”(除起始点外,只包含可能存在的换乘站点),站点之间用"-"连接。
第二行输出该方案的总票价。

&spm=1001.2101.3001.5002&articleId=147458961&d=1&t=3&u=24d1bf3f98f44a92b366b2f0ca9440bd)
2805

被折叠的 条评论
为什么被折叠?



