hdu1257 最少拦截系统
2015-12-05 08:48
162 查看
刚开始的时候理解错了题意以为是一个导弹系统只能打相邻的连续的几个导弹,后来想了想可以不同的导弹系统相互交错着打
所采取的策略是,开辟一个dp数组用来存当前每个导弹系统所能打的最高的导弹,其长度len为导弹系统的个数
新飞来一个导弹高度h,在dp中查找大于等于h的且在dp所有的数中尽可能小的一个数(为了尽可能多打导弹),若找到则更新dp为h(因为这个导弹系统以后只能打小于等于h的
导弹了),若找不到,则说明需要增加一个新的导弹系统了,则dp[len++] = h
所采取的策略是,开辟一个dp数组用来存当前每个导弹系统所能打的最高的导弹,其长度len为导弹系统的个数
新飞来一个导弹高度h,在dp中查找大于等于h的且在dp所有的数中尽可能小的一个数(为了尽可能多打导弹),若找到则更新dp为h(因为这个导弹系统以后只能打小于等于h的
导弹了),若找不到,则说明需要增加一个新的导弹系统了,则dp[len++] = h
#include <iostream> #include <cstdio> using namespace std; int a[10005]; int dp[10005]; int main() { int N; while (~scanf("%d", &N)) { for (int i = 0; i < N; i++) scanf("%d", &a[i]); int len = 0; for (int i = 0; i < N; i++) { bool flag = false; for (int j = 0; j < len; j++) { if (dp[j] >= a[i]) { //找到 dp[j] = a[i]; //更新dp flag = true; break; } } if (!flag) { dp[len++] = a[i]; //在dp中没找到大于等于a[i]高度的导弹系统 } } printf("%d\n", len); } return 0; }
相关文章推荐
- 开发首屏广告(Android)简述
- 九九乘法表
- 九九乘法小练习
- chengfa
- Linux运维 第三阶段 (十四)rsync
- OpenJudge_P7215 简单的整数划分问题(DP)
- Android之点击对话框(AlertDialog.Builder)外部区域不关闭对话框的设置
- 数组初学
- MATLAB and Octave Functions for Computer Vision
- 循环语句
- [LeetCode]String to Integer (atoi)
- Linux kvm 创建 虚拟机 的方法
- 数组代码
- 散列表总结
- 菱形
- 阶乘代码
- AutoCAD.Net/C#.Net QQ群:193522571 System.Drawing.Color和AutoDesk.AutoCAD.Colors.Color互转
- for语句联系 -小九九乘法表
- 输出菱形代码
- jsoncpp使用中的总结