- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最长上升子序列
最长上升子序列:
引出:
问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7….an,求它的一个子序列(设为s1,s2,…sn),使得这个子序列满足这样的性质,s1s2s3…sn并且这个子序列的长度最长。输出这个最长的长度。(为了简化该类问题,我们将诸如最长下降子序列及最长不上升子序列等问题都看成同一个问题,其实仔细思考就会发现,这其实只是符号定义上的问题,并不影响问题的实质)例如有一个序列:1? 7? 3? 5? 9? 4? 8,它的最长上升子序列就是 1 3 4 8 长度为4.
分析:
这题目是经典的DP题目,也可叫作LIS(Longest Increasing Subsequence)最长上升子序列?或者 最长不下降子序列。很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) 。
算法1:时间复杂度:O(n^2):我们依次遍历整个序列,每一次求出从第一个数到当前这个数的最长上升子序列,直至遍历到最后一个数字为止,然后再取dp数组里最大的那个即为整个序列的最长上升子序列。我们用dp[i]来存放序列1-i的最长上升子序列的长度,那么dp[i]=max(dp[j])+1,(j[1, i-1]); 显然dp[1]=1,我们从i=2开始遍历后面的元素即可。// Author: Tanky Woo
// Blog: www.WuTianQ
int dp[1000];
int LIS(int arr[1000], int n)
{
for(int i=1; i=n; ++i)
dp[i] = 0;
int ans;
dp[1] = 1;
for(int i=2; i=n; ++i)
{
ans = dp[i];
for(int j=1; ji; ++j)
{
if(arr[i]arr[j] dp[j]ans)
ans = dp[j];
}
dp[i] = ans+1;
}
ans = 0;
for(int i=1; i=n; ++i)
{
if(dp[i] ans)
ans = dp[i];
}
return ans;
}
算法2:时间复杂度:(NlogN):除了算法一的定义之外,增加一个数组b,b[i]用以表示长度为i最长子序列的最后一个数最小可以是多少。易证:ij时,b[i]b[j]。在二分查找时,一直更新b[]内容,设此时b的总长度为k,若1. arr[i] = b[k], 则b[k+1] = arr[i];若2. arr[i] ? b[k], 则在b[1..k]中用二分搜索大于arr[i]的最小值,返回其位置pos,然后更新b[pos]=arr[i]。
/ Author: Tanky Woo
// Blog: www.WuTianQ
// num为要查找的数,k是范围上限
// 二分查找大于num的最小值,并返回其位置
int bSearch(int num, int k)
{
int low=1, high=k;
while(low=high)
{
int mid=(low+high)/2;
if(num=b[mid])
low=mid+1;
else
high=mid-1;
}
return low;
}
?
int LIS()
{
int low = 1, high = n;
int k = 1;
b[1] = p[1];
for(int i=2; i=n; ++i)
{
if(p[i]=b[k])
b[++k] = p[i];
else
{
int pos = bSearch(p[i], k);
b[pos] = p[i];
}
}
return k;
}
最少拦截系统
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 20404????Accepted Submission(s): 8076
Problem Description
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢
您可能关注的文档
- 安全人机工程期末重点..doc
- 安全人机工程思考题--整理版..doc
- 宇龙数控加工仿真系统实验指导书new..doc
- 安全事故应急预案(总预案)..doc
- 安全保证体系..doc
- 安全保证体系及措施..doc
- 安全仪表系统设计与SIL的计算方法..doc
- 安全初级工程师复习题..doc
- 安全加固解决方案..docx
- 安全及安全管理..doc
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
最近下载
- 成套简历几何简约个人简历word简历模板.pdf VIP
- (新统编版)语文六年级上册 第三单元 大单元教学设计.docx
- 《盘扣制作》-精选·课件.ppt
- BP85224DA参考设计_ 5V200mA buck/正电压/晶丰明源家电电源.pdf
- 食管裂孔疝诊断治疗指南.doc
- BP85256D参考设计_12V300mA 晶丰明源家电电源.pdf
- 现代服务业劳动(教案) 六年级上册劳动鲁科版.pdf
- 2021年XX市委党校组工干部培训班学习心得体会.doc VIP
- 天津市第二十五中学2024-2025学年高三上学期第一次月考物理试卷.docx VIP
- 中国LNG加气站行业市场现状及发展前景分析-预计2025年市场保有量将超7700座.docx
文档评论(0)