【蓝桥杯】历届真题 游园安排【第十一届】【决赛】【B组】

资源限制
时间限制:1.0s 内存限制:256.0MB

要求输出方案的最长上升子序列问题,O(n^2)的复杂度只能过前7个点,故采用O(nlogn)的复杂度求解
本题解就最长上升子序列的O(nlogn)复杂度的解决方法不做详细讲解(涉及贪心和二分相关知识),重点讨论输出最优方案
        代码中用数组pos记录dp数组第i个字符串在s中的位置,f数组记录s[i]的上一个状态的末尾字符串在s中的位置, 对代码思考可知后达到最长的上升序列必然小于之前达到最长的上升序列,所以我们只需要记录最新的达到最长的子序列在s中的位置(记作k),代码如下
#include
#include

using namespace std;

string str;
string s[1000005], dp[1000005];
int f[1000005], pos[1000005], g[1000005];
int n = 0;

int main()
{
ios::sync_with_stdio

【蓝桥杯】历届真题 游园安排【第十一届】【决赛】【B组】最先出现在Python成神之路

版权声明:
作者:主机优惠
链接:https://www.techfm.club/p/26614.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>