洛谷 【P1052】过河

P1052 过河

题目描述

在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。

题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

输入输出格式

输入格式:

输入文件river.in的第一行有一个正整数L(1 <= L <= 10^9),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1 <= S <= T <= 10,1 <= M <= 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。

输出格式:

输出文件river.out只包括一个整数,表示青蛙过河最少需要踩到的石子数。

输入输出样例

输入样例#1:

10
2 3 5
2 3 5 6 7

输出样例#1:

2

说明

对于30%的数据,L <= 10000;

对于全部的数据,L <= 109。

2005提高组第二题

喜闻乐见的Code

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 100005
#define inf 0x3f3f
int f[maxn],pos[maxn];
bool stone[maxn];
int main() {
	memset(f,inf,sizeof(f));
	int l,s,t,m;
	scanf("%d%d%d%d",&l,&s,&t,&m);
	for(int i=1;i<=m;i++) scanf("%d",&pos[i]);
	if(s==t) {
		int ans=0;
		for(int i=1;i<=m;i++)
			if(pos[i]%s==0) ans++;
		printf("%d",ans);
		return 0;
	}
	sort(pos+1,pos+m+1);
	pos[m+1]=l;
	for(int i=0;i<=m;i++)
		if(pos[i+1]-pos[i]>90)
			pos[i+1]=pos[i]+(pos[i+1]-pos[i])%90;
	for(int i=1;i<=m;i++) stone[pos[i]]=true;
	for(int i=s;i<=t;i++)
		if(stone[i]) f[i]=1;
		else f[i]=0;
	for(int i=2*s;i<=pos[m+1];i++) {
		for(int j=s;j<=t;j++){
			if(j>i) break;
			f[i]=min(f[i],f[i-j]);
		}
		if(stone[i]) f[i]++;
	}
	printf("%d",f[pos[m+1]]);
	return 0;
}

  

时间: 2025-01-04 00:31:24

洛谷 【P1052】过河的相关文章

洛谷P1052 过河 动态规划

洛谷P1052 过河通过观察可以发现 这个点很稀疏 dp 有很长一段距离都是没有用的,那么我们可以采用离散化的思想 把这个距离压缩,但同时还要保证 对答案没有影响 如果 s==t 这时候我们需要特判 只要判断 pos[ i ] % s == 0 就可以知道是否踩到石子 然后因为 最多青蛙一次只跳了 10 假如 s == 9 t == 10 如果两个石子间的距离大于100 我们每次也可以 一步步的慢慢调整 ,其实总共只有10个状态,%10==1 %10==2 %10==3 然后我们就可以把距离 >

洛谷 P1052 过河

题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度).坐标为0的点表示桥的起点,坐标为L的点表示桥的终点.青蛙从桥的起点开始,不停的向终点方向跳跃.一次跳跃的距离是S到T之间的任意正整数(包括S,T).当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥. 题目给出独木桥的长度L,青蛙跳跃的距离

【洛谷P1052【NOIP2005提高T2】】过河

题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,--,L(其中L是桥的长度).坐标为0的点表示桥的起点,坐标为L的点表示桥的终点.青蛙从桥的起点开始,不停的向终点方向跳跃.一次跳跃的距离是S到T之间的任意正整数(包括S,T).当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥. 题目给出独木桥的长度L,青蛙跳跃的距离

洛谷P1002 过河卒

看到就顺便做了 NOIP2002普及组.那个年代还没有int64,不得不用高精算,然而现在一个long long就解决了.感受到了时代的进步呢. 题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. 棋盘用坐标表示,A点(0, 0).B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的. 现在要求你计算出卒从A点能够到达B点的路

洛谷P1244 青蛙过河 DP/思路

又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的人生经验理解能力. 题目想必已知,我就提几点可能会搞错的点吧. 1.题目说了青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,D→B,D→C,C→D:但却不能跳到A,B上再跳回来.所以不可以脑补成汉内塔那种跳法. 2.青蛙只能跳到比它大1号的青蛙上面,而不是比他大的青蛙就行.所以不可以脑补

洛谷 P2709 BZOJ 3781 小B的询问

题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小B请你帮助他回答询问. 输入输出格式 输入格式: 第一行,三个整数N.M.K. 第二行,N个整数,表示小B的序列. 接下来的M行,每行两个整数L.R. 输出格式: M行,每行一个整数,其中第i行的整数表示第i个询问的答案. 输入输出样例 输入样例#1: 6 4 3 1 3 2 1 1 3

洛谷1231 教辅的组成

洛谷1231 教辅的组成 https://www.luogu.org/problem/show?pid=1231 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册.已知一个完整的书册均应该包含且仅包含一本书.一本练习册和一份答案,然而现在全都乱做了一团.许多书上面的字迹都已经模糊了,然而HansBug还是可

洛谷教主花园dp

洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树的高度分别为10,20,30.教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高. 输入输出格式 输入格式: 输入文件garden.in的第1行为一个正整数n,表示需要种的

洛谷 P2801 教主的魔法 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=2801 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是不超过1000的正整数.教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W.(虽然L=R时并不