标签:hdu NPU tput 怎么 cout ++ div 数组 数据包
题目:
Input输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)
Output对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.
Sample Input
8 389 207 155 300 299 170 158 65
Sample Output
2
分析:LIS问题,如果暴力搜索的话时间复杂度是O(n^2),会超时,应该用dp解决
状态转移方程 dp[j]=max(dp[i]+1,dp[j]),当h[j]>h[i]时,dp[j],即从第0个到第个字符组成的字串的最大严格递增列就是dp[i]+1,dp[j]两者中的最大值(这个只是在遍历的过程中成立)
注意dp数组要初始化为1,因为最小的lis长度为1
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<string.h> 4 using namespace std; 5 6 int main(){ 7 int N; 8 while(scanf("%d",&N)!=EOF){ 9 int *h=new int[N]; 10 int *dp=new int[N]; 11 for(int i=0;i<N;i++){ 12 scanf("%d",&h[i]); 13 dp[i]=1; 14 } 15 int ans=0; 16 for(int i=0;i<N;i++){ 17 for(int j=i+1;j<N;j++){ 18 if(h[j]>h[i]){ 19 dp[j]=max(dp[i]+1,dp[j]); 20 } 21 } 22 ans=max(ans,dp[i]); 23 } 24 cout <<ans<<endl; 25 delete h,dp; 26 } 27 system("pause"); 28 return 0; 29 }
标签:hdu NPU tput 怎么 cout ++ div 数组 数据包
原文地址:https://www.cnblogs.com/shiyu-coder/p/13189325.html