LITTLE BIRD

Bzoj 3831

相对而言是一道比较简单的DP,不过它需要用单调队列优化。首先是朴素O(n2),

if(d[j]>f[i])

f[i]=min(f[i],f[j]);

else

f[i]=min(f[i],f[j]+1);

f[i]表示从1到i需要的最少代价

K很大时会很慢

 #include<bits/stdc++.h>

 #define INF 9999999

 using namespace std;

 int n,k;

 int f[];

 int d[];

 int main()

 {

 cin>>n>>k;

 memset(f,INF,sizeof(f));

 f[]=;

 for(int i=;i<=n;i++)

 cin>>d[i];

 for(int i=;i<=n;i++)

 {

 for(int j=i-k;j<i;j++)

 {

 if(d[j]>d[i])

 f[i]=min(f[i],f[j]);

 else

 f[i]=min(f[i],f[j]+);

 }

 }

 cout<<f[n];

 return ;

 }

然后是单调队列优化,O(n)的复杂度,对于两个位置i、j,i在j之后,如果f[i]<f[j],直接抛弃j,如果f[i]==f[j],那再h[i]>=h[j],也是抛弃j,即tail--,最后i入队。队列的单调性是单调递增的,每次取队首就可以了。

优化过后,果然很快。

#include<bits/stdc++.h>

using namespace std;

int top,tail,q[1000001];

int f[1000001];

int n,k;

int d[1000001];

bool cmp(int f1,int h1,int f2,int h2)

{

return f1==f2?h1>=h2:f1<f2;

}

int main()

{

    cin>>n>>k;

    for(int i=1;i<=n;i++)

    cin>>d[i];

    q[top=tail=1]=1;

    for(int i=2;i<=n;i++)

    {

     while(top<=tail&&i-top>k)top++;

     f[i]=f[q[top]]+(d[i]>=d[q[top]]?1:0);

     while(top<=tail&&cmp(f[i],d[i],f[tail],d[tail]))tail--;

     q[++tail]=i;

}

cout<<f[n];

return 0;

}

  

little bird的更多相关文章

  1. Flappy Bird 源码走读

    参考:https://github.com/kirualex/SprityBird 该项目基于spritekit,代码的结构很清楚,感觉用来学习spritekit非常不错. 1.项目只有一个viewC ...

  2. canvas 制作flappy bird(像素小鸟)全流程

    flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...

  3. fly bird

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 谢欣伦 - 原创软件 - 游戏专题 - 操蛋的小鸟Fucking Bird

    前段时间朋友介绍了一个最近很火的游戏<Flappy Bird>.在工作之余,我用了三天时间做了一个类似的游戏<Fucking Bird>.一开始分享给了两个女同事,发现她们玩嗨 ...

  5. 自己动手写游戏:Flappy Bird

    START:最近闲来无事,看了看一下<C#开发Flappy Bird游戏>的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了 ...

  6. C语言版flappy bird黑白框游戏

    在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了 ...

  7. Flapper Bird的学习笔记(一)

    因为我有一个超屌的梦想,所以就绝不做孬种的追梦人! 本文主要目的是为了实现Flapper Bird的功能. 另外一个目的是为了加强对Unity引擎的理解和掌握. 新人一枚,如若看到是我幸运.若是发现错 ...

  8. 闲扯游戏编程之html5篇--山寨版《flappy bird》源码

    新年新气象,最近事情不多,继续闲暇学习记点随笔,欢迎拍砖.之前的〈简单游戏学编程语言python篇〉写的比较幼稚和粗糙,且告一段落.开启新的一篇关于javascript+html5的从零开始的学习.仍 ...

  9. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  10. 65行 JavaScript 代码实现 Flappy Bird 游戏

    飞扬的小鸟(Flappy Bird)无疑是2014年全世界最受关注的一款游戏.这款游戏是一位来自越南河内的独立游戏开发者阮哈东开发,形式简易但难度极高的休闲游戏,很容易让人上瘾. 这里给大家分享一篇这 ...

随机推荐

  1. 深入理解YYCache

    前言 本篇文章将带来YYCache的解读,YYCache支持内存和本地两种方式的数据存储.我们先抛出两个问题: YYCache是如何把数据写入内存之中的?又是如何实现的高效读取? YYCache采用了 ...

  2. 如何维持App拥护登录状态(仅仅理论)

    这个问题太过于常见,也过于简单,以至于大部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常用的方法有以下几种: 一:服务端默认的session 这种方式最大的优点是服务端不用增加任 ...

  3. [leetcode-500-Keyboard Row]

    Given a List of words, return the words that can be typed using letters of alphabet on only one row' ...

  4. 【Android Developers Training】 99. 获取联系人详细信息

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. 【Android Developers Training】 90. 序言:解决云储存冲突

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. [转]浅谈C++指针直接调用类成员函数

    找了一番之后发现这篇文章讲的很清楚. 传送门

  7. phpcmsV9常用标签

    头部: <title>{if isset($SEO['title']) && !empty($SEO['title'])}{$SEO['title']}{/if}{$SEO ...

  8. VS2015 +Qt5 串口工具

    简单的小工具是VS2015 + Qt5.6.1实现的,界面部分是Qt实现,串口是封装的WinAPI,把串口收发模块封装成了个Serialport.dll 供Qt界面调用. 由于VS2015需要CRT运 ...

  9. 简单总结几种常见web攻击手段及其防御方式

    web攻击手段有几种,本文简单介绍几种常见的攻击手段及其防御方式 XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS XSS 概念 全称是跨站脚本攻击(Cross Site Scr ...

  10. 关于IO流代码BufferedReader

    package JBJADV003;import java.io.*;public class BufferedReaderTest { /** * @param args */ public sta ...