little bird
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的更多相关文章
- Flappy Bird 源码走读
参考:https://github.com/kirualex/SprityBird 该项目基于spritekit,代码的结构很清楚,感觉用来学习spritekit非常不错. 1.项目只有一个viewC ...
- canvas 制作flappy bird(像素小鸟)全流程
flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...
- fly bird
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 谢欣伦 - 原创软件 - 游戏专题 - 操蛋的小鸟Fucking Bird
前段时间朋友介绍了一个最近很火的游戏<Flappy Bird>.在工作之余,我用了三天时间做了一个类似的游戏<Fucking Bird>.一开始分享给了两个女同事,发现她们玩嗨 ...
- 自己动手写游戏:Flappy Bird
START:最近闲来无事,看了看一下<C#开发Flappy Bird游戏>的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了 ...
- C语言版flappy bird黑白框游戏
在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了 ...
- Flapper Bird的学习笔记(一)
因为我有一个超屌的梦想,所以就绝不做孬种的追梦人! 本文主要目的是为了实现Flapper Bird的功能. 另外一个目的是为了加强对Unity引擎的理解和掌握. 新人一枚,如若看到是我幸运.若是发现错 ...
- 闲扯游戏编程之html5篇--山寨版《flappy bird》源码
新年新气象,最近事情不多,继续闲暇学习记点随笔,欢迎拍砖.之前的〈简单游戏学编程语言python篇〉写的比较幼稚和粗糙,且告一段落.开启新的一篇关于javascript+html5的从零开始的学习.仍 ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- 65行 JavaScript 代码实现 Flappy Bird 游戏
飞扬的小鸟(Flappy Bird)无疑是2014年全世界最受关注的一款游戏.这款游戏是一位来自越南河内的独立游戏开发者阮哈东开发,形式简易但难度极高的休闲游戏,很容易让人上瘾. 这里给大家分享一篇这 ...
随机推荐
- java连接mysql源码
import java.sql.; import java.text.SimpleDateFormat; import java.util.; import java.util.Date; impor ...
- Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码
<Windows Azure Platform 系列文章目录> 我们在使用关系型数据的时候,有时候希望: - 管理员admin,可以查看到所有的数据 - 普通用户,某些敏感字段,比如信用卡 ...
- MySQL--当mysqldump --single-transaction遇到alter table(2)
在上篇<MySQL--当mysqldump --single-transaction遇到alter table>中测试发现,在MySQL 5.6版本中,如果在mysqldump期间修改表, ...
- DDD理论学习系列(9)-- 领域事件
DDD理论学习系列--案例及目录 1. 引言 A domain event is a full-fledged part of the domain model, a representation o ...
- Vulkan Tutorial 25 Images
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 到目前为止,几何图形使用每个顶点颜色进行着色处理,这是一个 ...
- 数据结构(C语言版)顺序表相关算法代码实现
这两天实现了一下顺序表的相关操作,包括顺序表初始化.创建.遍历.第i个元素前插入,删除第i个元素.查找元素e的位置.清空顺序表.销毁顺序表.合并两个非递减顺序表操作. 这次在网上学习到了新的布局方法, ...
- gulp实用配置(2)——中小项目
上一篇的gulp配置很简单,主要就是为了demo的查看和调试,这一篇则会相对详细一些,包括压缩合并打时间戳等. 在互联网环境比较好的城市,需要多人协作的,大一点的项目应该都用上了模块化(这里主要指co ...
- Chrome浏览器扩展开发系列之十九:扩展开发示例
翻译总结了这么多的官网内容,下面以一款博主开发的“沪深股票价格变化实时追踪提醒”软件为例,介绍Chrome浏览器扩展程序的开发,开发环境为Eclipse IDE+Chrome Browser. “沪深 ...
- 测试框架:使用SONAR分析代码质量
介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd.checkstyl ...
- 理解梯度下降法(Gradient Decent)
1. 什么是梯度下降法? 梯度下降法(Gradient Decent)是一种常用的最优化方法,是求解无约束问题最古老也是最常用的方法之一.也被称之为最速下降法.梯度下降法在机器学习中十分常见,多用 ...