BIT寒假练习-2013__1012:导弹防御问题
来源:互联网 发布:苹果手机4g网络怎么开 编辑:程序博客网 时间:2024/05/17 23:58
经典DP。
最多一次可以拦截的导弹数,就是在数列中找到一个最长不上升子序列,需要多少防卫导弹就是求一个最长上升子序列。
up[i]表示以第i个为结尾的子序列中最长的不上升子序列的长度。up[i]=max{up[j] + 1}(h[j]>=h[i])。
down[i]表示以第i个为结尾的子序列中最长的上升子序列的长度。down[i]=max{down[j] + 1}(h[j]<h[i])。
一开始没有看出来需要多少防卫导弹就是求一个最长上升子序列,纠结了半天,看了别人的题解才明白的。有点水了,好歹以前还做过这题的,都忘了。。。
#include <cstdio>#include <cstdlib>#include <iostream>using namespace std;int n,h[1100];int up[1100],down[1100];int main(){while (scanf("%d",&n) != EOF){ up[0] = -1; down[0] = -1; for (int i = 1 ; i <= n ; i ++) { scanf("%d",&h[i]); up[i] = 1; down[i] = 1; } for (int i = 1 ; i <= n ; i ++) { for (int j = 1 ; j < i ; j ++) { if (h[j] >= h[i]) up[i] = up[i]>up[j]+1 ? up[i] : up[j]+1; if (h[j] < h[i]) down[i] = down[i]>down[j]+1 ? down[i] : down[j]+1; } up[0] = up[0]>up[i] ? up[0] : up[i]; down[0] = down[0]>down[i] ? down[0] : down[i]; } printf("%d %d\n",up[0],down[0]);}}
- BIT寒假练习-2013__1012:导弹防御问题
- 2013寒假练习 1012:导弹防御问题
- 寒假练习 1012 导弹防御问题
- TOJ1004 防御导弹问题
- BIT1012 导弹防御问题
- 问题 : 导弹防御系统
- BIT寒假练习-2013__1000:a+b
- BIT寒假练习-2013__1001:Average Numbers
- BIT寒假练习-2013__1002:Roman numerals
- BIT寒假练习-2013__1007:Number Converter
- BIT寒假练习-2013__1008:Putting Apples
- BIT寒假练习-2013__1009:Number Sequence
- BIT寒假练习-2013__1010:Maximum Sum
- 2013寒假练习 1014:Big Event in BIT
- BIT寒假练习-2013__1003:Exchange for Cola
- BIT寒假练习-2013__1004:Who is the Smartest Man
- BIT寒假练习-2013__1006:The most frequent number
- 防御导弹
- android短信拦截
- ios之多视图应用程序源码
- Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
- 内存越界(累积篇)
- Linux grep
- BIT寒假练习-2013__1012:导弹防御问题
- jQuery的each函数--轻松实现一个页面中的多个进度条
- c3p0 数据库迁移
- Two minus one Rules
- gsensor即时数据的apk && 用gsensor来判断手机的静和动 && 手机摇一摇 &&气压计的测试应用
- PHP数组的总结
- java 路径问题总结
- 如何在CSDN博客添加友情链接
- mysql主从复制