拦截导弹 (最长上升子序列LIS)

 

 

复制代码
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 int list[26];    // 按袭击事件顺序保存各导弹高度
 8 int dp[26];        // dp[i] 保存以第i个导弹结尾的最长不增子序列长度
 9 
10 
11 int main() 
12 {
13     int n;
14     while(cin >> n)
15     {
16         for(int i = 1; i <= n; ++i)    
17             cin >> list[i];
18         
19         for(int i = 1; i <= n; ++i)  // 按照袭击时间顺序确定每一个dp[i]
20         {
21             int tmax = 1;    // 最大值的初始值为1,即以其结尾的最长不增子序列长度至少为1
22             for(int j = 1; j < i; ++j)    // 遍历其前所有导弹高度
23                 if(list[j] >= list[i])    // 若j号导弹不比当前导弹低
24                     tmax = max(tmax, dp[j] + 1);  // 将当前导弹排列在以j号导弹结尾的最长不增子序列之后,计算其长度dp[j] + 1, 若大于当前最大值,则更新最大值
25             
26             dp[i] = tmax;    // 将dp[i] 保存为最大值
27         }
28         int ans = 1;
29         for(int i = 1; i <= n; ++i)
30         {
31             ans = max(ans, dp[i]);    // 找到以每一个元素结尾的最长不增子序列中的最大值, 该最大值即为答案
32         }    
33         cout << ans << endl;
34         
35     }
36     
37     return 0;
38 }
复制代码

 

posted @   拾月凄辰  阅读(128)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示
主题色彩