考试的时候想到了正确算法然而因为种种细节错误只有40分。。。
简单思路:找转折点。(在处理的时候,假如一开始序列是逆着的,我们默认开头是一个转折点)虽然这不一定是唯一解,但一定是可行的最优解。
当然我的代码有一种把这个点给推到最高点的意思,大家可以慢慢品味。
错误备份:

  1. 对于相邻的两盆高度相同的花,我们不应该视为转折点,而我漏考虑了,根据我的写法,我默认把它视为了转折点。
int ANS1(){int t=0x7fffffff,cnt=0;rep(i,1,n){if(cnt%2){if(a[i]<=t)t=a[i];else t=a[i],cnt++;}else{if(a[i]>=t)t=a[i];else t=a[i],cnt++;}}return cnt;
}//It's the Accepted code.

这里的t的初值我们应该把它设为无穷大,而我一开始把它设为了0,这会导致i=1时一开始不会更新cnt。那么在它之后的递增序列也就不会更新了。也就是说,我们会把它变成了一个漏了一个状态的B方案求解。
比如说,样例数据
5
5 3 2 1 2
这样的一个数据,加入t初值为0,一开始t就会被更新成5,而cnt不会加1(事实上应该加1),然后在3这里被加上了1。再在1被加1,最后在最后返回2,实际上应该是1。当然1不是最优解,按照B条件有更优解3。而我的B条件写的是对的,所以会让我样例测试正确。
再比如
5
1 2 3 4 5
这题答案是2,而我的t初值为0的ANS1代码只能跑出0,再加上正常的ANS2的1,会输出1。
AC 代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
#define rep(i,a,n) for(register int i=(a);i<=(n);++i)
#define per(i,a,n) for(register int i=(a);i>=(n);--i)
#define fec(i,x) for(register int i=head[x];i;i=Next[i])
#define debug(x) printf("debug:%s=%d\n",#x,x)
#define mem(a,x) memset(a,x,sizeof(a))
template<typename A>inline void read(A&a){a=0;A f=1;int c=0;while(c<'0'||c>'9'){c=getchar();if(c=='-')f*=-1;}while(c>='0'&&c<='9'){a=a*10+c-'0';c=getchar();}a*=f;}
template<typename A,typename B>inline void read(A&a,B&b){read(a);read(b);}
template<typename A,typename B,typename C>inline void read(A&a,B&b,C&c){read(a);read(b);read(c);}
const int maxn=100000+7;
int n,a[maxn];
int ANS1(){int t=0x7fffffff,cnt=0;rep(i,1,n){if(cnt%2){if(a[i]<=t)t=a[i];else t=a[i],cnt++;}else{if(a[i]>=t)t=a[i];else t=a[i],cnt++;}}return cnt;
}
int ANS2(){int t=0,cnt=0;rep(i,1,n){if(cnt%2){if(a[i]>=t)t=a[i];else t=a[i],cnt++;}else{if(a[i]<=t)t=a[i];else t=a[i],cnt++;}}return cnt;
}
void Init(){read(n);rep(i,1,n)read(a[i]);
}
void Work(){int ans=max(ANS1(),ANS2());printf("%d\n",ans);
}
int main(){
//    freopen("flower.in","r",stdin);
//    freopen("flower.out","w",stdout);Init();Work();return 0;
}

转载于:https://www.cnblogs.com/hankeke/p/Noip2013-flower.html

Noip2013花匠相关推荐

  1. Luogu 1970 NOIP2013 花匠 (贪心)

    Luogu 1970 NOIP2013 花匠 (贪心) Description 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使 ...

  2. [NOIP2013]花匠

    [NOIP2013]花匠 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比 ...

  3. NOIP2013 花匠解题报告

    //<NOIP2013> 花匠 /*最优子结构性质,可以用动规.注意到存在30%的变态数据(1 ≤ n ≤ 100,000,0 ≤ h_i ≤1,000,000),因此应当找到线性的算法. ...

  4. NOIP2013 花匠 题解(方法全面)

    2.花匠 (flower.cpp/c/pas) [问题描述] 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间 ...

  5. [NOIP2013] 花匠

    初看这道题想到O(n2) 的暴力dp 用f[i][0]表示取第i个点为最低点时的答案, f[i][1]为最高点,且f[i][0] = max( f[j][1] ) +1 这样每次都要查询前面区间满足 ...

  6. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  7. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

  8. [vijos1571] 笨笨的导弹攻击

    题目链接 题解:和noip2013花匠很像,记录下奇偶即可 #include <iostream> #include <cstdio> using namespace std; ...

  9. 【NOIP2013提高组】花匠

    题目背景 NOIP2013 提高组 Day2 试题. 题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空 ...

最新文章

  1. 电子学会青少年编程等级考试Python案例10
  2. c++ 绘制函数图像_【图像增强】CLAHE 限制对比度自适应直方图均衡化
  3. poj1509最小表示法
  4. C# 学习笔记(8) 控件的跨线程访问
  5. 【强化学习】从强化学习基础概念开始
  6. python文本菜单程序_python3.x Day1 菜单程序练习
  7. MySQL 和 PostgreSQL 对比
  8. 自己动手写游戏:飞机大战
  9. sqlplus环境配置(login.sql)
  10. 前端面试题之http/HTML/浏览器(一)
  11. 力扣-88 合并两个有序数组
  12. centos linux 使用无线网卡,CentOS环境下安装无线网卡
  13. 摘录:java和sql如何判断数据库是否存在
  14. 《Java开发实战经典》 —— 视频列表
  15. 基于PaddlePaddle2.0的蝴蝶图像识别分类——利用预训练残差网络ResNet101模型中参数的调整,数据增强
  16. 中标麒麟linux系统安装打印机_中标麒麟系统安装教程
  17. windows 7 旗舰版 失效key
  18. 谈的话马上得到了聚众传媒创始人虞峰、博客中国创始人方兴东及携程网创始人之一的季琦等三位嘉宾的一致响应
  19. 25~30K的国外企业招聘面试考题,10分钟就能写出来了?
  20. 【软件测试】8年资深测试解析,软件测试行业情报,风风雨雨......

热门文章

  1. Mysql简单的存储过程怎么写
  2. es动态分配分片_解决ES索引分片均衡问题
  3. 美国算法交易的影响和启示
  4. python3可视化窗口操作_Python3.x+PyQtChart实现数据可视化界面(PyQtChart绘图;还有保存图片)和业务逻辑分离案例01_自己写的,有UI界面源代码...
  5. LeetCode-外观数列-纯C递归
  6. 数字用户线(Digital Subscriber Line,DSL)
  7. larval 操作mysql数据库_laravel的数据库操作(三种)
  8. ajax注册判断怎么写,ajax之判断用户名是否被注册
  9. linux 自动补全快捷键,day4 Linux下的快捷键和基本命令
  10. pytdx 获取板块指数_怎么查看各行业板块指数?