JZYZOJ1445 [noip2014day1-T3]飞扬的小鸟 动态规划 完全背包
http://172.20.6.3/Problem_Show.asp?id=1445
很容易看出来动态规划的本质,但是之前写的时候被卡了一下(不止一下),还是写一下题解。
直接暴力O(n*m^2)大概是70分,比较划算。
100分需要对上升下降方式找规律然后优化到O(nm);
可以看出,70分算法有很多时间浪费在没必要的上升计算上,为了减少上升计算,我们可以在预处理后把上升计算变为只有一次。
把下降的放在最后处理。
观察可以发现f[i][x]的赋值只可能来自于下面升上来的,其实本质就是一个有一点特殊的完全背包,然后背包处理就可以了。(不一定要像我那样写的,我觉得其实有更好看更容易懂的写法)
最后再处理一个下降的方案比较后赋值。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- #include<iostream>
- using namespace std;
- const int maxn=;
- int n,m,k;
- int a[maxn][]={};
- int f[maxn][]={},g[]={};
- int d[maxn]={};
- struct nod{
- int p,l,h;
- }e[maxn];
- bool mmp(nod aa,nod bb){
- return aa.p<bb.p;
- }
- int main(){
- //freopen("wtf.in","r",stdin);
- scanf("%d%d%d",&n,&m,&k);
- for(int i=;i<=n;i++){
- scanf("%d%d",&a[i][],&a[i][]);
- }
- for(int i=;i<=k;i++){
- scanf("%d%d%d",&e[i].p,&e[i].l,&e[i].h);
- }sort(e+,e++k,mmp);
- for(int i=;i<=k;i++){
- d[e[i].p]=i;
- }
- memset(f,,sizeof(f));
- int ans=f[][],cnt=f[][];
- for(int i=;i<=m;i++)f[][i]=;
- int w=;
- for(int i=;i<n;i++){
- int mi=,ma=m;
- if(d[i]){
- mi=e[d[i]].l+,ma=e[d[i]].h-;
- }
- int ff=;
- memset(g,,sizeof(g));
- for(int j=mi;j<=ma;j++){
- g[j]=f[i][j];
- if(f[i][j]!=cnt)ff=;
- }
- for(int j=;j<=m;j++){
- int x=min(m,a[i+][]+j);
- g[x]=min(g[x],g[j]+);
- }
- for(int j=;j<=m;j++){
- int x=min(m,a[i+][]+j);
- f[i+][x]=min(f[i+][x],g[j]+);
- }
- for(int j=mi;j<=ma;j++){
- if(j-a[i+][]>) f[i+][j-a[i+][]]=min(f[i+][j-a[i+][]],f[i][j]);
- }
- if(!ff){
- printf("0\n%d\n",w);
- return ;
- }
- if(d[i])w++;
- }
- for(int i=;i<=m;i++){
- ans=min(ans,f[n][i]);
- }
- printf("1\n%d\n",ans);
- return ;
- }
JZYZOJ1445 [noip2014day1-T3]飞扬的小鸟 动态规划 完全背包的更多相关文章
- NOIP 2014 Day1 T3飞扬的小鸟
题目描述:http://codevs.cn/problem/3729/ 表示各种shabi的我编和调了半天,思路大体就是一个完全背包的模型,不过会多一些额外的转移(因为题目限制高度之类的),不过值得注 ...
- vijos1907[noip2014]飞扬的小鸟(完全背包)
描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...
- Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
Luogu 1941 [NOIP2014]飞扬的小鸟 (动态规划) Description Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度 ...
- P1907飞扬的小鸟
P1907飞扬的小鸟 描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或 ...
- Codevs 3729==洛谷P1941 飞扬的小鸟
P1941 飞扬的小鸟 456通过 2.4K提交 题目提供者该用户不存在 标签动态规划2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 Flappy Bird 是一 ...
- Codevs 3729 飞扬的小鸟
飞扬的小鸟 标签 动态规划 NOIp提高组 2014 难度 提高+/省选- 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小 ...
- luogu 1941 飞扬的小鸟
这道题对于第13个数据点,不知为什么f数组第二位开到2000以下就不能过,求指教 飞扬的小鸟 传送门 题目大意 一个小鸟在\(n*m\)的方阵里,然后有许多管道你们玩过就不多介绍了,然后每一个位置,点 ...
- [codevs3729]飞扬的小鸟
[codevs3729]飞扬的小鸟 试题描述 输入 输出 输出文件名为 bird.out. 共两行. 第一行,包含一个整数,如果可以成功完成游戏,则输出 1,否则输出 0. 第二行,包含一个整数,如果 ...
- NOIP2014 飞扬的小鸟
3. 飞扬的小鸟 (bird.cpp/c/pas) [问题描述] Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的 ...
随机推荐
- 【BZOJ】1500: [NOI2005]维修数列
[算法]splay [题解]数据结构 感谢Occult的模板>_<:HYSBZ 1500 维修数列 #include<cstdio> #include<cctype> ...
- VMware 12安装虚拟机Mac OS X 10.10不能上网问题
1:从本机中选择打开连接网络,选择本地连接.如果是无线网可以选择无线网. 1: 2: 控制面板--->网络和共享中心 2:选择属性,点击共享按钮. 3:将internet连接共享下面选项都选中 ...
- Java爬取网易云音乐民谣并导入Excel分析
前言 考虑到这里有很多人没有接触过Java网络爬虫,所以我会从很基础的Jsoup分析HttpClient获取的网页讲起.了解这些东西可以直接看后面的"正式进入案例",跳过前面这些基 ...
- [device tree] interrupt mapping example
This is for Devicetree Specification Release 0.1 Interrupt Mapping Example p19 在講解前,先帶進一些 PCI 的基礎觀念 ...
- 刷新SqlServer数据库中所有的视图
ALTER PROCEDURE sp_refallview AS --刷新所有视图 DECLARE @ViewName VARCHAR(MAX); DECLARE @i INT; ; DECLARE ...
- Linux命令--more
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- FineReport——笔记
1填报分页:需要在填报预览下的链接后添加:&__cutpage__=v:
- FineReport——JS二次开发(CSS改变控件样式)
FR提供一些选择器,可以改变部分控件的样式,那么对于如何书写自己的css: 可以自己写css文件导入,也可以在页面加载结束事件中添加JS方法来改变css样式. 以文本框为例: 书写css文件,保存至% ...
- WdatePicker做出onchange效果
WdatePicker({onpicking: function (dp) {if (dp.cal.getDateStr() != dp.cal.getNewDateStr()) { Func(dp. ...
- LCT 文档
file:///C:/Users/Frank/Downloads/QTREE%E8%A7%A3%E6%B3%95%E7%9A%84%E4%B8%80%E4%BA%9B%E7%A0%94%E7%A9%B ...