1674: 入侵与反击 时间限制: 1 Sec  内存限制: 128 MB提交: 229  解决: 28[提交][状态][讨论版] 题目描述 A国部署的反导系统遇到了一个致命BUG,那就是每一次发射的拦截导弹的飞行高度都将只能小于等于上一枚导弹的飞行高度,第一次发射的拦截导弹的飞行高度可以看作是足够大.对于A国,这是一件很严重的问题,这意味着A国的防空系统面临空前危机. 通过对A国的军事部门计算机的入侵,A国还不知道敌对国B国刚才已经发现了这项BUG.更不知道,在这项BUG的报告书上交到B国空军…
题目链接:http://acm.swust.edu.cn/problem/585/ Time limit(ms): 3000 Memory limit(kb): 65535   SWUST国的一支科学考察队到达了举世闻名的古埃及金字塔. 关于金字塔的建造一直是一个未解之谜, 有着“西方史学之父”之称的希罗多德认为,金字塔的建造是人力和牲畜,花费20 年时间从西奈半岛挖掘天然的石头运送到埃及堆砌而成.也有不少人认为是外星人修建的.人们发现胡夫金字塔的经线把地球分成东.西两个半球,它们的陆地面积是相…
最长上升子序列.最长不下降子序列,解法差不多,就一点等于不等于的差别,我这里说最长不下降子序列的. 有两种解法. 一种是DP,很容易想到,就这样: REP(i,n) { f[i]=; FOR(j,,i-) ); } DP是O(n^2)的,我感觉已经不错了不过还有超碉的nlogn的方法. nlogn的方法: 用栈和二分查找. 遇到一个元素a[i],若它不小于栈顶s[top],直接入栈:若小于栈顶,则在栈中二分查找,用它替换栈中比它大的第一个元素.最终栈的大小就是最长不下降子序列的长度(栈中元素并不…
#include<stdio.h> ] , temp[] ; int n , top ; int binary_search (int x) { ; int last = top ; int mid ; while (fir <= last ) { mid = (fir + last) / ; if ( x <= temp[mid] ) { last = mid - ; } else { ] ) ; else fir = mid + ; } } } int main () { //…
P1049 最长不下降子序列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数第二行n个数 输出格式 最长不下降子序列的长度 测试样例1 输入 3 1 2 3 输出 3 备注 N小于5000for each num <=maxint   题意:中文题意   题解:不下降也就是>=   n^n  dp[i] 表示以a[i]结尾的最长不下降子序列的长度 /**********************…
一.简单的O(n^2)的算法 很容易想到用动态规划做.设lis[]用于保存第1~i元素元素中最长不下降序列的长度,则lis[i]=max(lis[j])+1,且num[i]>num[j],i>j.然后在lis[]中找到最大的一个值,时间复杂度是O(n^2). 代码实现: int Longest_Increasing(int num[],int n){ int lis[n],i,j; for(i=0;i<n;i++){ lis[i]=1; for(j=0;j<i;j++) if(nu…
最长不下降子序列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数第二行n个数 输出格式 最长不下降子序列的长度 测试样例1 输入 3 1 2 3 输出 3 备注 N小于5000for each num <=maxint       由N小于5000可知可以使用蛋疼的平方算法. 那么首先,我们都知道对于一个数列来讲,不下降子序列最短的的长度肯定是1. 那么我们设置一个f[i],表示以第i个数为结尾…
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数 第二行n个数 输出格式 最长不下降子序列的长度 测试样例1 输入 3 1 2 3 输出 3 备注 N小于5000 for each num <=maxint 我们弄一个数组f[i]表示前i个数的最长长度,一开始全都置为1是他自己本身.然后先对0~n-1循环.i =0 ~ n-1对于每一个a[i]在他后面的数设为a[j] (j>i) 如果a[j]&…
从后向前对已搜点做两遍LIS(最长不下降子序列),分别求出已搜点的最长递增.递减子序列长度.这样一直搜到第一个点,就得到了整个序列的最长递增.递减子序列的长度,即最长递减子序列在前,最长递增子序列在后,得到题目所求的双端队列的最长不下降子序列. 注意要去重,当发生替换之后,同种元素在两个序列中的数量不同.为得到最长序列,当然是把少的去掉,留下多的. 5 2 1 2 2 3 #include<stdio.h> #include<cstring> #include<vector&…
今天花了很长时间终于弄懂了这个算法……毕竟找一个好的讲解真的太难了,所以励志我要自己写一个好的讲解QAQ 这篇文章是在懂了这个问题n^2解决方案的基础上学习. 解决的问题:给定一个序列,求最长不下降子序列的长度(nlogn的算法没法求出具体的序列是什么) 定义:a[1..n]为原始序列,d[k]表示长度为k的不下降子序列末尾元素的最小值,len表示当前已知的最长子序列的长度. 初始化:d[1]=a[1]; len=1; (0个元素的时候特判一下) 现在我们已知最长的不下降子序列长度为1,末尾元素…