首页 > 代码库 > HDOJ 1257 LIS
HDOJ 1257 LIS
题目大意:
输入N,表示雷达监测到来袭的导弹数目,之后输入每个导弹的发射高度,因为每套系统第一次发射的导弹高度任意高,后续发射的导弹不能高于先前的高度,所以计算打落所有导弹所需要的最小系统数量。
算法思想:
因为每套系统所发射的导弹是非递增的序列,所以只需求出所有来袭导弹的最长上升序列的规模数即为需要的系统数。用dp[i]记录到i的最长上升子序列,状态方程为
dp[i]=max(dp[j])+1 (1=<j<i) .
代码如下:
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int MAXN=10000; int H[MAXN]; bool vis[MAXN]; int dp[MAXN];//记录最大长度 int LIS(int H[],int N){ int m=0; int ans=1; dp[1]=1; vis[1]=true; for(int i=2;i<=N;i++){ m=0; for(int j=1;j<i;j++){ if(dp[j]>m&&H[j]<H[i]){ m=dp[j]; } } dp[i]=m+1; ans=max(ans,dp[i]); } return ans; } int main(){ int N; while(cin>>N){ for(int i=1;i<=N;i++){ cin>>H[i]; } cout<<LIS(H,N)<<endl; } return 0; }
HDOJ 1257 LIS
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。