蓝桥-ALGO-13-拦截导弹
来源:互联网 发布:数据库中存储的是什么 编辑:程序博客网 时间:2024/05/17 23:06
ACM模版
描述
题解
典型的 LIS 问题 + 贪心问题。
贪心时只需要每套系统尽可能拦截,不用保证拦最多,只要保证能拦的都拦就好了。
题目没有说多少个炮弹,所以我一开始开了 10 大小的数组,结果 AC 了,真是无聊,竟然数据这么小。
代码
#include <iostream>#include <list>using namespace std;const int MAXN = 10;const int INF = 0x3f3f3f3f;int a[MAXN], f[MAXN], d[MAXN];int vis[MAXN];int bsearch(int *f, int size, int a){ int l = 0, r = size - 1; while (l <= r) { int mid = (l + r) / 2; if (a <= f[mid - 1] && a > f[mid]) { return mid; } else if (a > f[mid]) { r = mid - 1; } else { l = mid + 1; } } return -1;}int LIS(int *a, int n){ f[0] = a[0]; d[0] = 1; int j, size = 1; for (int i = 1; i < n; i++) { if (a[i] > f[0]) { j = 0; } else if (a[i] <= f[size - 1]) { j = size++; } else { j = bsearch(f, size, a[i]); } f[j] = a[i]; d[i] = j + 1; } return size;}list<int> li;list<int> li_;list<int>::iterator it;int main(int argc, const char * argv[]){// freopen("/Users/zyj/Desktop/input.txt", "r", stdin); int cnt = 0, x; while (cin >> x) { a[cnt++] = x; li.push_back(x); } cout << LIS(a, cnt) << '\n'; int res = 0; while (!li.empty()) { res++; int last = INF; li_.clear(); for (it = li.begin(); it != li.end(); it++) { if (*it <= last) { last = *it; } else { li_.push_back(*it); } } swap(li, li_); } cout << res << '\n'; return 0;}
阅读全文
0 0
- 蓝桥-ALGO-13-拦截导弹
- 蓝桥杯 ALGO-13 算法训练 拦截导弹 Java版
- 蓝桥-ALGO-26-麦森数
- 蓝桥-ALGO-33-数列
- 蓝桥-ALGO-40-会议中心
- 蓝桥 ALGO-2 最大最小公倍数
- 蓝桥-ALGO-9-摆动序列
- 蓝桥-ALGO-10-集合运算
- 蓝桥-ALGO-12-幂方分解
- 蓝桥-ALGO-14-回文数
- 蓝桥-ALGO-16-进制转换
- 蓝桥-ALGO-17-乘积最大
- 蓝桥-ALGO-18-单词接龙
- 蓝桥-ALGO-19-方格取数
- 蓝桥-ALGO-20-求先序排列
- 蓝桥-ALGO-22-数的划分
- 蓝桥-ALGO-24-统计单词个数
- 蓝桥-ALGO-27-FBI树
- 将Linux下编译的warning警告信息输出到文件中[整理笔记]
- Windows导出mysql表结构到word文档
- Spring+测试遇到的问题
- Python函数
- Android5.0新特性:RecyclerView实现上拉加载更多
- 蓝桥-ALGO-13-拦截导弹
- 深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
- LeetCode 173. Binary Search Tree Iterator
- 内存的堆分配和栈分配
- ASP.NET-Application对象
- 关于jsp的静态和动态引入文件问题
- PHP 实现四种基本排序算法
- JS(去掉前后空格或去掉所有空格)的用法
- 二叉树的中序遍历