Algorithm 马拉松24比赛资格:DNA-TLE

Algorithm 马拉松24比赛资格:DNA-TLE,algorithm,Algorithm,我正在尝试这一点,(所以这不是作弊或其他什么,只是想学习,因为答案没有发布,只有给定测试用例输入文件的正确输出) 有10个给定的测试用例输入,要为其提交相关的输出文件。我最初提交的是一个简单的嵌套for循环(开始,结束)对的实现,回答了以下问题:从(基于0的)索引start,到end(包括)结束的子字符串的波动性度量是什么 显然,对于最大问题限制106,O(N2)是不可行的,所以我只得到了5/10的测试用例正确(当然是第一个和更简单的-5) 因此,我在这里写作是为了寻求群体智慧,了解如何改进我的

我正在尝试这一点,(所以这不是作弊或其他什么,只是想学习,因为答案没有发布,只有给定测试用例输入文件的正确输出)

有10个给定的测试用例输入,要为其提交相关的输出文件。我最初提交的是一个简单的嵌套for循环(开始,结束)对的实现,回答了以下问题:从(基于0的)索引
start
,到
end
(包括)结束的子字符串的波动性度量是什么

显然,对于最大问题限制106,O(N2)是不可行的,所以我只得到了5/10的测试用例正确(当然是第一个和更简单的-5)

因此,我在这里写作是为了寻求群体智慧,了解如何改进我的算法,也就是说,我怀疑嵌套for循环(开始、结束)是优化的主要瓶颈(当然!)。到目前为止,我一直在尝试将其表述为关于字符串/子字符串的动态规划(DP)问题,但是,在提出状态表示和转换位以实现DP方面没有太大的成功

为了便于参考,并表明这不是家庭作业,我已经诚实地尝试了,我的原始提交是可用的


非常感谢您提供的任何帮助,甚至是类似问题的链接,我可以在谷歌上搜索教程博客帖子/示例解决方案/赛后编辑分析。

您尝试过分而治之吗


如果我正确理解这个问题,给定一条长度为n的DNA链S,我们将S分成两半,S_左和S_右,S_左由S[I]组成,其中0谢谢,我下次有机会的时候会尝试。我会在其他地方附上我的类似帖子的评论,如Codeforces、Codechef、Topcoder等。供您参考和信息#1:测试用例数据是特殊的,每个用例上的“T”或“C”的数量都很小,可以强制执行,除了一个包含1000000个“T”或“C”字符且没有明显可以手动解决的“A”或“G”字符的情况。#2:1。如果我们只想最大化比率,而不是长度,我们可以考虑只有一个坏字母的子串。2.如果长度也被考虑在内,我们应该另外检查是否存在形式为0000110000的子串(k个零,2个1和k个零),其中k是最佳比率。另一方面,开始时T和C与A和G的比率接近1。后来,为了更好地压缩输入,这个比率被大大降低了。