本文共 1830 字,大约阅读时间需要 6 分钟。
这道题前部分是求最长递减子序列,后部分是求不同的最长递减子序列的个数。前者利用二分查找有O(nlogn)的时间复杂度,但由于后者决定了整体的时间复杂度,故这里没有采用这样的优化。后者如果不考虑“不同”,则为简单的动态规划,把在这个元素之前能够“续”一个的序列数目加起来就可以。当考虑“不同”的时候需要仔细考虑下,实际上,假设以当前元素结束的最长递减子序列长度为pos,那么之前所有与该元素具有相同pos的元素,如果值相同,应该是连续出现的,即中间不会有个元素值不同。考虑下pos为以当前元素结束的最长递减子序列长度可以立刻得出这样的结论。这也是标准答案采用的方法。
/* ID: thestor1 LANG: C++ TASK: buylow */#include #include #include #include #include #include #include #include #include #include
转载地址:http://zbxli.baihongyu.com/