传送门

可以考虑DP

设 f [ i ] [ 1/2/3 ] [ 0/1 ] 表示当前考虑到第 i 头牛,打算让当前位置的编号变成 1/2/3,并且打算让整段序列上升/下降 0/1

然后就对每种情况慢慢考虑转移就行了

可以发现第一维可以直接优化掉,然后空间就是 O(1),时间就是 O(n)

太简单就不用注释了吧...

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
int n,f[][];
int main()
{
int a;
n=read();
while(n--)
{
a=read();
if(a==)
{
f[][]=min(f[][],min(f[][],f[][]))+;
f[][]=min(f[][],f[][])+;
f[][]=min(f[][],min(f[][],f[][]));
f[][]=min(f[][],f[][])+;
f[][]=f[][]+;
continue;
}
if(a==)
{
f[][]=min(f[][],min(f[][],f[][]))+;
f[][]=min(f[][],f[][]);
f[][]=f[][]+;
f[][]=min(f[][],min(f[][],f[][]))+;
f[][]=min(f[][],f[][]);
f[][]=f[][]+;
continue;
}
f[][]=min(f[][],min(f[][],f[][]));
f[][]=min(f[][],f[][])+;
f[][]=f[][]+;
f[][]=min(f[][],min(f[][],f[][]))+;
f[][]=min(f[][],f[][])+;
}
int ans=1e9+;
for(int i=;i<=;i++) for(int j=;j<=;j++) ans=min(ans,f[i][j]);
printf("%d",ans);
return ;
}

P2896 [USACO08FEB]一起吃饭Eating Together的更多相关文章

  1. bzoj1609 / P2896 [USACO08FEB]一起吃饭Eating Together(最长不降子序列)

    P2896 [USACO08FEB]一起吃饭Eating Together 显然的最长不升/降子序列,求出最长值,则答案为$n-$最长值(改掉剩下的). 复杂度$O(nlogn)$ (然鹅有神仙写了$ ...

  2. 洛谷 P2896 [USACO08FEB]一起吃饭Eating Together

    P2896 [USACO08FEB]一起吃饭Eating Together 题目描述 The cows are so very silly about their dinner partners. T ...

  3. 洛谷P2896 [USACO08FEB]一起吃饭Eating Together

    题目描述 The cows are so very silly about their dinner partners. They have organized themselves into thr ...

  4. 洛谷—— P2896 [USACO08FEB]一起吃饭Eating Together

    https://www.luogu.org/problem/show?pid=2896 题目描述 The cows are so very silly about their dinner partn ...

  5. [luoguP2896] [USACO08FEB]一起吃饭Eating Together(DP)

    传送门 由于 Di 只有 3 种情况,那么就很简单了 f[i][j][0] 表示前 i 个,且第 i 个变成 j 的 递增序列最小修改次数 f[i][j][1] 表示前 i 个,且第 i 个变成 j ...

  6. super调用父类的属性方法

    super:可以用来修饰属性  方法   构造器 当子类与父类中有同名的属性时,可以通过   super.此属性  显式的调用父类声明的属性 若想调用子类的同名的属性“this.此属性” 2.当子类重 ...

  7. BZOJ 1711: [Usaco2007 Open]Dining吃饭

    1711: [Usaco2007 Open]Dining吃饭 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 902  Solved: 476[Submit ...

  8. Bzoj1711 [Usaco2007 Open]Dining吃饭

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 872  Solved: 459 Description 农夫JOHN为牛们做了很好的食品,但是牛吃饭很挑食 ...

  9. hdu------(4302)Holedox Eating(树状数组+二分)

    Holedox Eating Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

随机推荐

  1. android键盘的Done按钮

    在EditText中,可以使用setImeOptions()方法来来开启软键盘的"Done"按钮. 示例代码如下:editText.setImeOptions(EditorInfo ...

  2. 第二天:tomcat体系结构和第一个Servlet

    1.  打war包 2.  Tomcat体系再说明:   问题:如何去配置默认主机???    3.tomcat和servlet在网络中的位置 4.    servlet快速入门案例   1).开发s ...

  3. Android广播接收者

    其实,在什么是广播的第一句就已经说明了广播有什么用了.对了,笼统一点讲就是用来传输数据的.具体一点说就是:1. 实现了不同的程序之间的数据传输与共享,因为只要是和发送广播的action相同的接受者都能 ...

  4. 磨刀——python及相关工具

    1.python语言包 1.1去https://www.python.org/,在download栏下载最新版python2或者python3 tips:1.点击下载会很慢,推荐:迅雷,百度云盘下载, ...

  5. java的邮件系统实现

    想要java中邮件发送和接收邮件,首先需要支持SMTP- pop/pop3/IMAP协议,发送的话还需要配置文件,来对程序提供相应的接口,只需要这两个文件,就可以实现邮件的接收发送, 协议为jar包封 ...

  6. c语言输入数据

    比如要求输入一行数据(注意:没有给出输入多少个),并且以空格隔开那么就可以如下进行判断 '; ],temp,i=; while(c!='\n') { scanf("%d%c",&a ...

  7. PCL—关键点检测(NARF)低层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5051533.html 关键点检测本质上来说,并不是一个独立的部分,它往往和特征描述联系在一起,再将特征描述和识别. ...

  8. C语言访问网页

    一.理论 http://www.zixue7.com/thread-3860-1-1.html

  9. 连接Excel数据库

    SQL语法:http://www.w3school.com.cn/sql/sql_syntax.asp Ctrl键拖(也就是复制) 先输入1,2,然后下拉 一.问题的提出 在ASP编程中会遇到很多大大 ...

  10. Dubbo项目入门

    Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 它的特性如下 面向接口代理的高性能RPC调用 智能 ...