气球 【解题报告】
来源:互联网 发布:java socket 编辑:程序博客网 时间:2024/05/01 06:50
2、气球 b.pas/cpp/c
【题目描述】
SM中学一年一度的体艺节马上开幕了,在一条笔直的塑胶跑道上,从左往右挂着N只气球,第i只气球的高度是Hi。奶牛Bessie喜欢搞恶作剧,于是它决定用气枪把所有的气球都打破。Bessie每次都是从塑胶跑道的最左边射出一颗子弹,Bessie可以在任意的高度开枪,然后子弹会水平的从最左边飞到最右边,当子弹一旦碰到某个气球时,该气球瞬间破裂,然后子弹的高度会降低1,子弹继续沿水平方向往右边飞过去,如果再碰到气球,气球也会瞬间破裂,子弹的高度再次降低1,然后继续水平的往右边飞去……。那么Bessie至少要发射多少颗子弹,才能把所有的气球打破?
【输入格式】b.in
第一行,一个整数N。 1 <= N <= 1000000。
第二行,N个整数,第i个整数是Hi。 1<=Hi <= 1000000。
【输出格式】b.out
一个整数,最少的子弹数量。
【数据规模】
对于40%的数据, N <= 4000。
输入样例 b.in
输出样例 b.out
样例解释
5
2 1 5 4 3
2
设定第一颗子弹高度是2,从最左边往最右边发射过去,这样第一、第二个气球会被射破。
设定第二个子弹高度是5,从最左边往最右边射过去,第三、第四、第五个气球会被射破。
5
1 2 3 4 5
5
5
4 5 2 1 4
3
设定第一颗子弹高度是4,从最左边往最右边发射过去,这样第一个气球会被射破。
设定第二个子弹高度是5,从最左边往最右边射过去,第二、第五个气球会被射破。
设定第三个子弹高度是2,从最左边往最右边射过去,第三、第四个气球会被射破。
第一眼看到这题目就是水题,直接模拟暴搜。做完后仔细一想1000000的数据会超时,
于是我重新作了一遍,用一个桶数组装气球的度,从后往前枚举,O(n)算法。
代码如下 :
#include<iostream>#include<cstdio>using namespace std;int n,i,j,k=1;int a[1000001],t[1000001],dp[1000001];int main(){cin>>n;for(i=1;i<=n;i++) scanf("%d",&a[i]);for(i=n;i>=1;i--){t[a[i]]++;if(t[a[i]-1]){dp[i]=dp[i+1];t[a[i]-1]--;}//前面有气球的话后面直接爆掉else dp[i]=dp[i+1]+1;没有的话说明要多一发子弹}cout<<dp[1];return 0;}
- 气球 【解题报告】
- 趣味算法实习:踩气球第二周-《一道很简单的题目》解题报告&AC代码
- 程序设计实习踩气球第八周《勇敢与鲁莽》解题报告&AC代码
- 杭州电子科技大学Online Judge 之 “漂浮的气球(ID1004)”解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 气球
- Antiprime解题报告
- expr解题报告
- 华容道解题报告
- tju解题报告
- zju1062/pku1095解题报告
- UsacoGate解题报告 --- 序曲
- eclipse的java facets的runtimes如何删除tomcat?
- 在onActivityResult中弹出DialogFragment的解决方案 activity和fragment
- 欢迎使用CSDN-markdown编辑器
- Android USB通信弹出权限确认框
- 25- 一个人的生活
- 气球 【解题报告】
- 面试宝典之测试流程涉及概念
- eclipse中查找资源快捷方式
- 初识JavaScript-变量和作用域
- three.js_82 出现WebGL: INVALID_OPERATION: copyTexImage2D: framebuffer is incompatible format错误解决方法
- auto decltype 用于返回值类型后置时的占位
- openni+nite体感鼠标模拟4(鼠标点击模拟)
- 面试宝典之测试用例
- 设计一个算法,计算出n阶乘中尾部零的个数