D. Frog Traveler
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
bfs+dp+前驱
- 题意
- 思路
- AC代码
题意
青蛙跳进了一个深度为n的井里
不同的深度青蛙最多可以跳ai的高度(0~a[i])
每次跳跃后要休息一下
在不同的深度休息会往下掉b[i]
要求 如果能够出到井外
求最小跳跃次数和路径
如果不能
输出-1
思路
暴力直接想到bfs
但是需要细节
不然会T
AC代码
#include <bits/stdc++.h>
#define endl "\n"
#define INF 0x3f3f3f3f3f3f3f3f
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
using namespace std;
typedef long long ll;
const ll mod = 1000000007;
const double PI = acos(-1.0);
const double EI = exp(1.0);
const int N = 300050;
const int maxn = 2 * N;
const double eps = 1e-8;
int a[N], b[N], v[N];
int ans[N];
ll dp[N];
int vis[N], pre[N];
void bfs(int n)
{int x=n;queue<int>q;for (int i = 1; i <= n; i++)dp[i] = maxn,pre[i]=i;dp[x] = 0;vis[x] = 1;q.push(x);int last = n; //关键点就在于这个last 其代表目前青蛙能跳到的最接近0的地方while (!q.empty()){if (vis[0])break;x = q.front();q.pop();int v =x+b[x];for (int i=min(v,last-1); i >= v - a[v]; i--)//主要目的就是在这剪枝{if (vis[0])break;if (vis[i])continue;if (!vis[i] && dp[i] > dp[v] + 1){vis[i] = 1;dp[i] = dp[x] + 1;pre[i] = x;q.push(i);}}last = min(last, v - a[v]);}}
void solve()
{int n;cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];}for (int i = 1; i <= n; i++){cin >> b[i];}for (int i = 0; i <= n; i++)dp[i] = maxn;bfs(n);if (dp[0] == maxn)cout << -1 << endl;else{cout << dp[0] << endl;int tot = 0;int q = 0;while (pre[q]!=q){ans[++tot] =q;q = pre[q];}for (int i = tot; i >= 1; i--)cout << ans[i] << " ";cout << endl;}
}
int main()
{std::ios_base::sync_with_stdio(false);cin.tie(0); cout.tie(0);//int t; cin >> t; while (t--)solve();return 0;
}
D. Frog Traveler相关推荐
- B. Frog Traveler(cf)bfs
原题链接:Problem - 1601B - Codeforces 题目大意:一个青蛙它从井底跳出去.从x点可以网上蹦[0, ax]的距离到y点,到了y点之后又会掉下来by步.问你它最少走多少步出去. ...
- Frog Traveler 最短路,bfs剪枝,打印路径
题意 : 给两个长度为n的数组,初始位于索引n,目标是越过索引1,注意不能往后跳,每次可以跳0到a[i]a[i]a[i]米,即,身处索引iii,可以跳[0,a[i]][0, a[i]][0,a[i]] ...
- 【线段树】Frog Traveler(CF751D)
正题 CF751D 题目大意 现在有n个点,当你在i时,可以向前跳 0∼ai0\sim a_i0∼ai 步,跳到j,然后向后走bjb_jbj步,现在让你从n开始跳,回答跳到0的最少步数 解题思路 ...
- hdu 5037 Frog 贪心 dp
哎,注意细节啊,,,,,,,思维的严密性..... 11699193 2014-09-22 08:46:42 Accepted 5037 796MS 1864K 2204 B G++ czy Frog ...
- Frog Jumps CodeForces - 1324C(二分)
There is a frog staying to the left of the string s=s1s2-sn consisting of n characters (to be more p ...
- atcoder A - Frog 1(DP)
A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There a ...
- 华为抓取错误日志在哪里_抓取网址进行分析爬虫工具Screaming Frog SEO Spider for Mac...
Screaming Frog SEO Spider for Mac是一款专门用于抓取网址进行分析的网络爬虫开发工具,你可以通过这款软件来快速抓取网站中可能出现的损坏链接和服务器错误,或是识别网站中临时 ...
- 2018北京ICPC D. Frog and Portal(构造)
D : Frog and Portal 时间限制:1000ms 单点时限:1000ms 内存限制:512MB 描述 A small frog wants to get to the other s ...
- [codeforces 1324C] Frog Jumps 一直向右+边界处理
Codeforces Round #627 (Div. 3) 比赛人数6434 [codeforces 1324C] Frog Jumps 一直向右+边界处理 总目录详见https://bl ...
最新文章
- 编译器是怎样工作的?用lex和yacc 写一个计算器(2)
- 动态规划之 0-1背包问题及改进
- c语言课程设计坦克大战,funcodec++课程设计_坦克大战
- Web应用架构-Full-text Search Service
- ZZULIOJ 1092: 素数表(函数专题)
- Jenkins+GitHub+Xcode+fir搭了一个持续集成环境
- java之Cookie详解
- 2021年高考呼和浩特市二中成绩查询,呼和浩特市第二中学,是一所百强中学,2020年高考用实力来证明!...
- mysql 跳过授权表_跳过授权表登录后使用replace into创建root权限用户
- log4j日志设置error级别以上
- 010editor 过期处理
- 如何在 2 分钟内入睡(二战时期美国飞行员训练法)
- 用Python物理建模的第一本书终于来啦
- 爬虫基础_01——正则
- Java程序员未来职业应如何规划?
- 打印机打印中文,截取字符时出现乱码问题
- 我的翻转课堂教学实践
- 小程序游戏开发三个引擎用哪个好呢 Cocos,Egret,Laya?
- realme 拨号代码_手机拨号界面为什么会有quot;*和#quot;键?这2个键有什么用?望周知...
- 安装ubuntu 遇到的问题