文章
211
粉丝
0
获赞
926
访问
31.3k
#include <bits/stdc++.h>
using namespace std;
int main() {
int k; // 导弹数量
while (cin >> k) {
vector<int> h(k); // 存储每枚导弹的高度
for (int i = 0; i < k; i++) {
cin >> h[i];
}
// dp[i]表示:以第i枚导弹结尾(最后拦截的是第i枚),最多能拦截多少枚
// 初始化为1,表示至少能拦截自己这一枚
vector<int> dp(k, 1);
int ans = 1; // 记录全局最大值,初始为1
// 动态规划:遍历每个位置作为结尾
for (int i = 1; i < k; i++) {
// 遍历i前面的所有位置j,看能否从j转移到i
for (int j = 0; j < i; j++) {
// 转移条件:第j枚的高度 >= 第i枚的高度
// 即:前面拦截的导弹高度不低于当前导弹,才能继续拦截
if (h[j] >= h[i]) {
// 状态转移:从j转移过来,拦截数量+1
dp[i] = max(dp[i], dp[j] + 1);
}
}
// 更新全局最大值
ans = max(ans, dp[i]);
}
cout << ans << endl;
}
...
登录后发布评论
暂无评论,来抢沙发