洛谷 飞扬的小鸟(混合背包,细节)
题目链接:
[NOIP2014 提高组] 飞扬的小鸟 - 洛谷
思路:
表示到达(i, j)点最少需要的跳跃次数。每个 f 值根据上一个对应位置,加上这一次的跳跃/下降得到。
计算完所有 f 值之后,倒序遍历,找出跳过的柱子数,以及最短跳跃次数即可。
需要注意几个点:
- 可以跳多次,所以非第一次跳的地方用到了完全背包。(注意:也正是因为这个,排除越界情况必须写在逻辑的最后面,因为第一次跳即使不在有效范围内也要算上,这样才能用完全背包)。
- 最高跳到m高度,所以对m高度做了一个特判。
代码:
//要注意的点:
//1.鸟可以从任意高度出发
//2.可以点屏幕多次,跳跃效果叠加
#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+5, maxm = 1e3+5;
int n, m, k; //长度,最大高度,水管数量
int p, l, h, x[maxn], y[maxn], low[maxn], high[maxn]; //上升,下降。最低,最高高度
int f[maxn][maxm]; //f[i][j]表示飞到(i,j)需要的最少点击次数
int main(){//inputios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin>>n>>m>>k;for(int i=1; i<=n; i++) cin>>x[i]>>y[i];for(int i=1; i<=n; i++) low[i]=0, high[i]=m+1;for(int i=1; i<=k; i++) cin>>p>>l>>h, low[p]=l, high[p]=h;//initfor(int i=1; i<=n; i++)for(int j=0; j<=m; j++)f[i][j] = inf;f[0][0] = inf;//solvefor(int i=1; i<=n; i++){for(int j=x[i]+1; j<=m-1; j++){ //一般上升f[i][j] = min(f[i][j], f[i-1][j-x[i]]+1); //第一次跳f[i][j] = min(f[i][j], f[i][j-x[i]]+1); //非第一次跳}for(int j=m-x[i]; j<=m; j++){ //到顶上升的特判f[i][m] = min(f[i][m], f[i-1][j]+1); //第一次跳f[i][m] = min(f[i][m], f[i][j]+1); //非第一次跳}for(int j=0; j<=m-y[i]; j++) f[i][j] = min(f[i][j], f[i-1][j+y[i]]);for(int j=1;j<=low[i];j++) f[i][j]=inf; //越界(太低)for(int j=high[i];j<=m;j++) f[i][j]=inf; //越界(太高)}int cnt=k, ans=inf;for(int i=n; i>=1; i--){for(int j=low[i]+1; j<=high[i]-1; j++) ans=min(ans,f[i][j]);if(ans < inf) break; //能到达当前位置if(low[i]>0 || high[i] <= m) cnt--; //这里有柱子}if(cnt==k) cout<<1<<'\n'<<ans;else cout<<0<<'\n'<<cnt;
}
洛谷 飞扬的小鸟(混合背包,细节)相关推荐
- 洛谷 p1757 通天之分组背包(哈希,分组背包)2021-08-12
题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 01 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品相互 ...
- 洛谷 P1049 装箱问题(01背包)
一道水题,但看到好久没有发博客了,再一看是一道noip普及组t4,就做了. 题目链接 https://www.luogu.org/problemnew/show/P1049 解题思路 一道裸的01背包 ...
- 洛谷 P1757 通天之分组背包
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- 洛谷P1757 通天之分组背包 [2017年4月计划 动态规划06]
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
先上题目链接:P1616 疯狂的采药 然后放AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ...
- 洛谷1048 采药(01背包)
传送门 [题目分析] 这个两维降一维妙妙妙啊...... 好吧我已经菜的做01背包了.... [代码~] #include<bits/stdc++.h> using namespace s ...
- 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
P1208 [USACO1.3]混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业 ...
- 洛谷P1757 通天之分组背包
题目链接:点击进入 思路 分组背包,套板子 代码 #include<iostream> #include<string> #include<map> //#incl ...
- 洛谷 P1757 通天之分组背包 C++ dp
题目背景 直达通天路·小 A 历险记第二篇 题目描述 自 0101 背包问世之后,小 A 对此深感兴趣.一天,小 A 去远游,却发现他的背包不同于 01 背包,他的物品大致可分为 k 组,每组中的物品 ...
最新文章
- 鸿合一体机触屏没反应怎么办_【干货】嵌入式工控一体机选择电容屏还是电阻屏?...
- MOS管击穿原因和防护措施!
- vmalloc 实现
- 用于Web开发的8 个最好的跨平台编辑器
- 【Task5(2天)】模型调参
- 《dp补卡——买卖股票问题》
- .NETCore_生成实体
- Linux-lsof
- 数模比赛经验分享(美赛分享)
- 【Python系列】python文件或文本加密(4种方法)
- 创建LabwindowsCVI工程
- 圣诞节计算机音乐,圣诞节的背景音乐
- 怎么查看自己本地的ip地址
- ubuntu18打开网页慢的问题
- 笔记本win7做wifi热点
- Linux命令之expr详解
- 【数据库原理与应用MySQL版】实验指导
- 排序算法-归并排序详细图解
- 用iPhone一秒拍摄3D照片,Facebook这项技术厉害了
- Windows注册服务的两种方式,并设置服务开机自启