动态规划:LIS优化
2024-09-26 17:57:24
对于1D/1D动态规划来说,理论时间复杂度都是O(n^2)的,这种动态规划一般都可以进行优化,贴一篇文章
https://wenku.baidu.com/view/e317b1020740be1e650e9a12.html
这里介绍最简单的一种,LIS的求法
其实就是二分,找单调性来二分
HDU1950是一道裸题
#include <iostream>
#include<cstring>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1e5 + ;
int s[N];
int n,p,a[N];
int len;
int main()
{
cin>>n;
while(n--){
cin>>p;
memset(s,,sizeof(s));
for(int i = ;i<p;i++)cin>>a[i];
s[] = a[];len = ;//长度从1开始
for(int i = ;i<p;i++){ int t = a[i];
if(t>s[len])s[++len] = a[i];
else{
/*************/int l = ,r = len,mid;//这里的二分法采用了左闭右闭的思路
<span style="white-space:pre"> </span>int ans = ;
while(l<=r)
{
mid = (l+r)/;
if(s[mid]<t)
{l = mid +;ans = max(ans,mid);}//ans即为思路中的j,j必然为s数组中小于t的最大的数
else r = mid-;
}
s[ans+] = t;/******************/
}
}
//for(int i = 1;i<p;i++){cout<<s[i];}//有必要可以打开看看s中存的是什么值
cout<<len<<endl;
}
return ;
}
然后
int p = lower_bound(s+,s+len+,t)-s;
s[p] = t;
如果觉得不对可以找到合唱队形那个题的程序对拍一下子
最新文章
- C++之路进阶——poj3461(Oulipo)
- Solr Cloud - SolrCloud
- Laterality issue on fMRI image
- Node进阶:核心模块http简介
- 如何优雅地使用 Sublime Text
- js各种宽高(3)
- struts2中的表达元素标签使用详解
- HTTP的请求头标签If-Modified-Since
- oracle sql 树操作
- mac/Linux/centos ssh连接服务器以及跳板机,实现类型Xshell 功能
- JVM 组成以及各部分作用
- 201771010126王燕《面向对象程序设计(Java)》第三周学习总结
- python 的运行方式和基础变量
- N!
- 2017";百度之星";程序设计大赛 - 复赛 01,03,05
- sgu 169 Numbers
- holiday(假期)_题解
- [Spark Core] 在 Spark 集群上运行程序
- nginx开启gzip压缩前端css,js
- Datatable转实体 实体转换辅助类