洛谷1941 飞扬的小鸟

飞扬的小鸟 飞扬小鸟源代码+素材资源。可直接运行!初学者练习项目,非常适合。 立即下载

原题地址

https://www.luogu.org/problem/show?pid=1941

背包DP

我至今为止碰到的综合性最强的DP题,没有之一。想通了其实转移方程不难想,就是坑点太多而且看不出来,debug期间极其心塞……一开始想到的是70分搞法,确实想到了用DP,但没有想到是背包,套了三重循环成功超时……看了题解发现这道题的正解综合了01背包和完全背包,(然而并不是多重背包),大循环内要套三个DP外加处理,还有无解情况的判断,每个都需要留心。

解题思路

首先我们应该发现,对1~n每个位置而言,上升可以有多次,下降只有一次,最高点可以由前一位置的任意高度通过x次点击上升得到。这就是上面提到的三个DP。把过程抽象出来,实际上是完全背包(上升次数不限)、01背包(下降1次或0次),以及一个不怎么像背包的DP(……)。

1.上升:转移范围——从0经一次上升可以到达的地方~顶点m;

2.顶点:转移范围——前一位置没有管道的高度;

3.下降:转移范围——当前位置没有管道的高度,且加上下降距离后不会超过顶;

4.覆盖:把当前位置的管道部分再赋回极大值,因为上升做DP时没有排除管道部分;

5.无解判断:上述步骤完成后,扫一遍当前位置的所以高度,如果全是极大值就输出0,然后输出前面的管道数。

参考代码

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
int up[10005],down[10005],dp[10005][1005];
bool f[10005];
const int inf=210000000;
struct mc
{
     intfloor,ceil;
}p[10005];
int main()
{
     intn,m,k;
     scanf("%d%d%d",&n,&m,&k);
     for(int i=0;i<n;i++)
     {
         scanf("%d%d",&up[i],&down[i]);
     }
     intx,y,z;
     for(int i=1;i<=n;i++)
     {
         p[i].ceil=m+1;
         p[i].floor=0;
     }
     for(int i=1;i<=k;i++)
     {
         scanf("%d%d%d",&x,&y,&z);
         f[x]=1;
         p[x].floor=y;
         p[x].ceil=z;
     }
     p[0].ceil=m+1;
     p[0].floor=0;
     intcnt=0;
     for(int i=1;i<=n;i++)
     for(int j=0;j<=m;j++)
       dp[i][j]=inf;
     dp[0][0]=inf;
    int t;
     for(int i=1;i<=n;i++)
     {
         if(f[i]) cnt++;
         boolff=0;
         for (int j=up[i-1];j<=m;j++)
         {
            dp[i][j]=min(dp[i][j],dp[i-1][j-up[i-1]]+1);
            dp[i][j]=min(dp[i][j],dp[i][j-up[i-1]]+1);
         }
         for(intj=m-up[i-1];j<=m;j++)
         {
              dp[i][m]=min(dp[i][m],dp[i-1][j]+1);
              dp[i][m]=min(dp[i][m],dp[i][j]+1);
         }
         for(int j=p[i].floor+1;j<p[i].ceil;j++)
         {
              if(j+down[i-1]<=m)
              dp[i][j]=min(dp[i][j],dp[i-1][j+down[i-1]]);
         }
         for(int j=1;j<=p[i].floor;j++) dp[i][j]=inf;
         for(int j=p[i].ceil;j<=m;j++) dp[i][j]=inf;
         for(int j=1;j<=m;j++) if (dp[i][j]!=inf) ff=1;
         if(!ff)
         {
              cout<<0<<endl;
              if(f[i]!=0)
              cout<<cnt-1;
              elsecout<<cnt;
              return0;
         }
     }
     intmi=inf;
     for(int i=1;i<=m;i++)
     mi=min(mi,dp[n][i]);
     cout<<1<<endl;
     cout<<mi;
     return0;
}


使用Docker搭建MaxKB智能体平台 【代码】使用Docker搭建MaxKB智能体平台。 阅读详情

相关推荐

【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示

本设计通过NE555与三极管的巧妙配合,仅用基础元件实现了呼吸灯效果。核心在于利用RC积分电路将PWM信号转换为控制电压,并通过负反馈动态调节占空比。Proteus仿真验证了方案的可行性,读者可进一步优化参数或扩展功能,探索更多硬件设计可能性。

2201_75797484的博客 2978

洛谷P1941 [NOIP 2014 提高组] 飞扬的小鸟

玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。小鸟从游戏界面最左边任意整数高度位置出发,到达游戏界面最右边时,游戏完成。,则输出成功完成游戏需要最少点击屏幕数,否则,输出小鸟最多可以通过多少个管道缝隙。,分别表示游戏界面的长度,高度和水管的数量,每两个整数之间用一个空格隔开;,以及在这个位置上玩家不点击屏幕时,小鸟在下一位置下降的高度。如下图所示,蓝色直线表示小鸟的飞行轨迹,红色直线表示管道。第一行,包含一个整数,如果可以成功完成游戏,则输出。

yjfyjfyjf54188的博客 1149

【AI深究】合成数据(Synthetic Data)深度解析:原理、算法与工程实践——全网最详细流程|核心原理、主流方法、数学表达、工程实践与细节、未来趋势|GAN、VAE、语言模型LLM合成如GPT

大家好,我是爱酱。本篇延续将会系统梳理合成数据(Synthetic Data)的核心原理、主流方法、数学表达、工程实践与未来趋势,结合数学公式,帮助你全面理解这一AI建模的关键技术。 注:本文章含大量数学算式、详细例子说明及大量代码演示,大量干货,建议先收藏再慢慢观看理解。新频道发展不易,你们的每个赞、收藏跟转发都是我继续分享的动力!

AI人工智能爱酱~你的AI学习好帮手~ 4904

P1941 [NOIP2014 提高组] 飞扬的小鸟——解题报告

下面考虑如何转移,因为题目非常的明确,两层之间只有两种转移方式。将高度作为背包的容量,每一层的选择作为物品,点击的次数作为价值。小鸟从游戏界面最左边任意整数高度位置出发,到达游戏界面最右边时,游戏完成。下降即相当于从背包中取出,而上升则是正常的放入物品。由于题目要求,上升是可以累计多次点击来上升的。一个很显然的结论是,按照水平方向,后面的状态的值不影响前面的状态,所以这是一个很典型的。小鸟位于横坐标方向不同位置时,上升的高度。或者小鸟碰到管道时,游戏失败。时,无法再上升,游戏继续。

风中的微尘的博客 859

国产HDMI2.0芯片GSV2011怎么选?手把手教你用它设计音视频采集卡(附FPGA/海思对接指南)

本文详细解析国产HDMI2.0芯片GSV2011在音视频采集卡设计中的应用,涵盖芯片选型、硬件设计要点及与FPGA/海思平台的对接指南。GSV2011凭借4K@60Hz支持、音频提取嵌入功能和高集成度,成为音视频设备的核心选择,助力开发者快速实现高性能采集卡设计。

weixin_30181209的博客 331

谷歌DreamFusion使用方法及实例详解

DreamFusion 是谷歌提出的基于文本生成3D模型的突破性技术,无需3D训练数据,通过2D扩散模型(如Imagen)与NeRF(神经辐射场)结合实现。以下为使用社区开源实现(如。)的详细步骤及实例。

主攻大数据 人工智能 物联网 安全 低空经济等方向。mtsc 、gtest特邀分享嘉宾 1042

完全背包+01背包,P1941 [NOIP2014 提高组] 飞扬的小鸟

很能考验动态规划的功力

EQUINOX1的博客 1003

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1352

NOIP 2014 飞扬的小鸟 [DP]

#20. 【NOIP2014】解方程  统计  描述 提交 自定义测试 已知多项式方程: a0+a1x+a2x2+...+anxn=0 求这个方程在 [1,m]内的整数解(nn和mm均为正整数)。 输入格式 第一行包含22个整数n、 m,每两个整数之间用一个空格隔开。 接下来的n+1n+1行每行包含一个整数,依次为a0,a1,a2,...,a

PomeCat的博客 806

433MHz无线通信避坑指南:如何解决信号干扰和误码问题

本文深入探讨433MHz无线通信中的信号干扰和误码问题,提供从射频前端设计到协议优化的全链路解决方案。通过天线匹配、电源噪声抑制、曼彻斯特编码改进及实时频点切换等技术,显著提升通信稳定性和距离。适合智能家居和工业无线控制系统的开发者参考。

weixin_29288313的博客 415

C# Code-Behind 技术全面解析

Code-Behind 是 ASP.NET Web Forms 中的一种技术模式,通过将用户界面标记(.aspx文件)与程序逻辑代码(.aspx.cs文件)分离,实现表现层与逻辑层的解耦。其核心思想是前端展示与后台逻辑的物理文件分离,通过ASP.NET编译器将两者合并编译成一个Page类并执行。Code-Behind 的优势包括较好的代码组织、较高的开发效率,尤其适合快速开发数据驱动应用。然而,与现代开发模式如ASP.NET MVC、ASP.NET Core和Blazor相比,Code-Behind 在可维

记录学习的过程 956

洛谷 P1941 飞扬的小鸟

啧,YL 居然选了 Noip 的题来做练习?

Jerry_wang119的博客 320

Unity Hololens2开发|(三)工程发布及真机部署(3种方法)

选择项目->属性,进入项目属性页,选择调试,将HoloLens2的IP地址填写至页面,如下图。确保HoloLens2与计算机在同一网络下,并保持开启状态,点击运行,即开始生成部署.注意:该方式不支持覆盖安装,如果重复安装同一个App,需要先卸载再安装!选择Release下的ARM64,选择远程计算机,如下图。

游戏开发小Y的博客 14万+

动态规划—洛谷 P1941 飞扬的小鸟

洛谷 P1941 飞扬的小鸟 分析 这显然是个dp问题,在每一列中,我没有两种选择:上升或下降。 上升:在每一列中可以无限次选择上升,恰好符合完全背包问题; 下降:通过题目知道,每列只能下降一次,正是01背包问题; 顶点的特判; 状态dp[i][j]表示到达点(i,j)花费的最少时间。 当前状态(红点)可以是由其他三个状态(蓝点,粉点,绿点)转移的 ∴ f[i][j]=min(f[i][j+down[i-1]],f[i-1][j-up[i-1]],f[i][j-up[i]]) 其中up[i],dow

weixin_46563439的博客 308

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【完全背包】洛谷P1941 飞扬的小鸟

洛谷P1941 飞扬的小鸟 题目 Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为 nn,高为 mm 的二维平面,其中有 kk 个管道(忽略管道的宽度)。 小鸟始终在游戏界面内移动...

CW. 464

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

洛谷P1941 [NOIP2014 提高组] 飞扬的小鸟

洛谷P1941 [NOIP2014 提高组] 飞扬的小鸟 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为 nn,高为 mm 的二维平面,其中有 kk 个管道(忽略管道的宽度)。 小鸟始终在游戏界面内移动。小鸟从游戏界面最左边任意整数高度位置出发,到达游戏界面最右边时,游戏完成。 小

wh52013141314的博客 246

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

洛谷 P1941 飞扬的小鸟

洛谷 P1941 飞扬的小鸟 原题链接 首先吐槽几句 noip都快到了,我还不刷起联赛大水题! 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为n ,高为 m 的二维平面...

weixin_30482181的博客 93

【洛谷】 P1941 飞扬的小鸟 (题解)

题目链接 这题关于DP 用f[i][j]表示横坐标为i时高度为j的最少点击次数。 用正无穷来表示不可能达到这个状态。 于是我们可以分析出状态转移的方式: 上升——完全背包转移方式 下降——01背包转移方式 超过m变为m——特判 细节详见代码 #include <cstdio> #include <iostream> #include <algorithm> us...

zhaoweiming2019的博客 296

[洛谷P1941] 飞扬的小鸟

洛谷题目链接:飞扬的小鸟 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为 \(n\),高为 \(m\) 的二维平面,其中有 \(k\) 个管道(忽略管道的宽度)...

dengtun2502的博客 188

洛谷-1941 飞扬的小鸟

题目描述 Flappy Bird是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为 n,高为 m 的二维平面,其中有 k 个管道(忽略管道的宽度)。 小鸟始终在游戏界面内移动。小鸟从游戏界面最左边任意整数...

mkopvec的博客 263

[洛谷] P1941 飞扬的小鸟

题目 题目描述 Flappy Bird是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编: 游戏界面是一个长为 n,高为 m 的二维平面,其中有 k 个管道(忽略管道的宽度)。 小鸟始终在游戏界面内移动。小鸟从游戏界面最左边任意...

AAA_Ljw 177

洛谷P1941飞扬的小鸟——细节DP

题目:https://www.luogu.org/problemnew/show/P1941 此题主要注意许多细节,详见代码。 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,k,up[10005],dow...

aodan5477的博客 138
上一篇: 洛谷1018 乘积最大
下一篇: 洛谷1525 关押罪犯
zero_from
博客等级 码龄10年 11粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值