NOIP 2013 积木大赛 贪心
2016-03-20 17:19
316 查看
来源
Noip 2013 Day2 T1
题目描述
春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第i块积木的最终高度需要是hi。在搭建开始之前,没有任何积木(可以看成 n 块高度为 0 的积木)。接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第 L 块到第 R 块之间(含第 L 块和第 R 块)所有积木的高度分别增加1。小 M 是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。
样例输入
5
2 3 4 1 2
样例输出
5
这题一些网上的代码写的是线段树,但其实这题最优解法是贪心策略。
由于每次只能递增连续区间内的积木高度,所以并不是说最高的积木高度就是答案。
问题可以这么转化:从1-n的连续区间内,从1开始判断相邻的两个积木,如果高度高的一方能满足,则两者均能满足。
则该问题的答案可表示为:∑h[i]-h[i-1](h[i]>h[i-1]).
Noip 2013 Day2 T1
题目描述
春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第i块积木的最终高度需要是hi。在搭建开始之前,没有任何积木(可以看成 n 块高度为 0 的积木)。接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第 L 块到第 R 块之间(含第 L 块和第 R 块)所有积木的高度分别增加1。小 M 是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。
样例输入
5
2 3 4 1 2
样例输出
5
这题一些网上的代码写的是线段树,但其实这题最优解法是贪心策略。
由于每次只能递增连续区间内的积木高度,所以并不是说最高的积木高度就是答案。
问题可以这么转化:从1-n的连续区间内,从1开始判断相邻的两个积木,如果高度高的一方能满足,则两者均能满足。
则该问题的答案可表示为:∑h[i]-h[i-1](h[i]>h[i-1]).
#include <iostream> #include <cstdio> using namespace std; const int maxn=100000+5; int main() { int a[maxn],tot=0,n,cha; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); cha=a[i]-a[i-1]; if(cha>0) { tot+=cha; } } printf("%d",tot); return 0; }
相关文章推荐
- 1.一些 贪心算法 的简单思维题:
- 贪心算法——字典序最小问题
- 贪心算法——区间调度问题
- Jump Game I,II 贪心
- Wildcard Matching
- 贪心法实现无向图的划分 代码
- 贪心题目循环和控制台折行
- HDOJ 1009
- 【解题报告】【USACO】酸奶工厂
- 【解题报告】【】交谊舞
- POJ 1328
- Best Cow Line
- HDU 1009 Fatmouse's Trade
- POJ2377 Bad Cowtractors
- 贪心 hdu 1003
- 最大容器
- 满足和为定值的两个数或多个数
- Codeforces Round #300
- HUD1052 __ P2 1002 __ Tian Ji -- The Horse Racing
- 2015年国家集训队测试 BZOJ3816矩阵变幻