首页 > 其他分享 >AT_dp_a Frog 1 题解

AT_dp_a Frog 1 题解

时间:2024-07-16 15:59:40浏览次数:6  
标签:10 ch 题解 30 样例 Frog 足場 leq dp

Frog 1

题面翻译

N N N 个石头,编号为 1 , 2 , . . . , N 1,2,...,N 1,2,...,N。对于每个 i ( 1 ≤ i ≤ N ) i(1 \leq i \leq N) i(1≤i≤N),石头 i i i 的高度为 h i h_i hi​。

最初有一只青蛙在石头 1 1 1 上。他将重复几次以下操作以到达石头 N N N:

  • 如果青蛙当前在石头 i i i 上,则跳到石头 i + 1 i+1 i+1 或石头 i + 2 i+2 i+2。需要 ∣ h i − h j ∣ |h_i - h_j| ∣hi​−hj​∣ 的费用,而 j j j 是要落到上面的石头。

找到青蛙到达石头 N N N 之前需要的最小总费用。

题目描述

$ N $ 個の足場があります。 足場には $ 1,\ 2,\ \ldots,\ N $ と番号が振られています。 各 $ i $ ($ 1\ \leq\ i\ \leq\ N $) について、足場 $ i $ の高さは $ h_i $ です。

最初、足場 $ 1 $ にカエルがいます。 カエルは次の行動を何回か繰り返し、足場 $ N $ まで辿り着こうとしています。

  • 足場 $ i $ にいるとき、足場 $ i\ +\ 1 $ または $ i\ +\ 2 $ へジャンプする。 このとき、ジャンプ先の足場を $ j $ とすると、コスト $ |h_i\ -\ h_j| $ を支払う。

カエルが足場 $ N $ に辿り着くまでに支払うコストの総和の最小値を求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

$ N $ $ h_1 $ $ h_2 $ $ \ldots $ $ h_N $

输出格式

カエルが支払うコストの総和の最小値を出力せよ。

样例 #1

样例输入 #1

4
10 30 40 20

样例输出 #1

30

样例 #2

样例输入 #2

2
10 10

样例输出 #2

0

样例 #3

样例输入 #3

6
30 10 60 10 60 50

样例输出 #3

40

提示

制約

  • 入力はすべて整数である。
  • $ 2\ \leq\ N\ \leq\ 10^5 $
  • $ 1\ \leq\ h_i\ \leq\ 10^4 $

Sample Explanation 1

足場 $ 1 $ → $ 2 $ → $ 4 $ と移動すると、コストの総和は $ |10\ -\ 30|\ +\ |30\ -\ 20|\ =\ 30 $ となります。

Sample Explanation 2

足場 $ 1 $ → $ 2 $ と移動すると、コストの総和は $ |10\ -\ 10|\ =\ 0 $ となります。

Sample Explanation 3

足場 $ 1 $ → $ 3 $ → $ 5 $ → $ 6 $ と移動すると、コストの総和は $ |30\ -\ 60|\ +\ |60\ -\ 60|\ +\ |60\ -\ 50|\ =\ 40 $ となります。

#include<bits/stdc++.h>
using namespace std;
inline int read();
long long i,q,w,e,r,t,y,u,o,p,s,d,f,g,h,j,l,z,x,c,v,n,m,k;
long long a[1100][1100],b[111100],ss[111100];
long long asd[10000][10000];
int main()
{
	ios::sync_with_stdio(false); cout.tie(0); cin.tie(0);
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>b[i];
	}
	ss[1]=0;
	ss[2]=abs(b[1]-b[2]);
	for(i=3;i<=n;i++)
	{
		ss[i]=min(ss[i-1]+abs(b[i]-b[i-1]),ss[i-2]+abs(b[i]-b[i-2]));
	}
	cout<<ss[n];
    return 0;
}
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

标签:10,ch,题解,30,样例,Frog,足場,leq,dp
From: https://blog.csdn.net/yaosichengalpha/article/details/140468873

相关文章

  • dm/dp含义和接线
    dm/dp含义和接线DM:dataminus,DM是USB的数据线D-(白色线)DP:dataplusDP是USB的数据线D+(绿色线)usb接线排列方式是VCC,D-,D+,GNDDigitalPositive&DigitalMinusUSB的通信都是由主机发起的(iic类似)USB使用差分传输模式,有两条数据线,分别是:a.USB数据......
  • 【题解】AT_abc192_d [ABC192D] Base n
    洛谷AT_abc192_d题解\(66pts\)其实我也不知道为什么考场上会想出dfs这种做法(严格来说应该不算),但是最后的分数还是比较可观的。主要思路首先,将\(X\)视为一个\(n\)进制数\(X'\)。枚举\(n\)进制,从字符串\(X\)中的最大数字加\(1\)开始。在此过程中,如果\(X'\)比......
  • [题解]POJ3304 Segment
    POJ3304Segment题意简述多测,每次给定\(n\)条线段,请问是否能找到\(1\)条直线,使得所有线段在该直线上的投影有公共部分。注:两点距离\(<10^{-8}\)被认为是相等的。思路分析题意转化一下,就是要我们找一条直线\(l_1\),穿过所有线段。这样对于任意直线\(l_2\perpl_1\),都满足题意。......
  • [题解]UVA10902 Pick-up Sticks
    题意简述多测。给定坐标系上依次给定\(n\)根木棍的起始和终止坐标,按顺序放置这些木棍,询问最终处在最上层的木棍有哪些。\(n\le100000\)。保证任意时刻最上层的木棍不超过\(1000\)个。思路分析看起来数据范围很刁钻,不过除了暴力以外的方法想不出了,就写了一份上交,结果过了。思......
  • 题解:P10724 [GESP202406 七级] 区间乘积
    思路看到\(a_i\)很小,不难想到状压一类的东西。考虑把每个数的质因数当做二进制位,这个二进制位的\(1/0\)代表含有这个质因数的奇偶,再做一个异或前缀和,显然完全平方数的质因子个数一定为偶数,根据异或的性质,两个相同的数异或才为\(0\)所以只需要找到异或前缀和中相同的数的个......
  • UDP网络编程java实现
    UdpUdp服务端实现步骤:创建Udp对象,监听端口创建数据包(数据包,数据长度)接收数据包(数据包)读取数据包,并输出将字节数组转化为字符串响应客户端消息(设置数据包)发送数据包//监听端口号DatagramSocketdatagramSocket=newDatagramSocket(6666);//创建数据包byte[]buff......
  • 迷宫守卫 题解
    给个题目链接:迷宫守卫。下面直接开始讲了。发现一个事情,省选的题已经不怎么考板子难度很高的题了,现在考的都是思维难度非常高的题。首先,我们考虑字典序的性质,如果第一位劣,那么后面无论多优都没用,所以我们要优先满足靠前的位置。于是我们考虑使用二分来找出第一个数,后面以此类......
  • 矩阵优化 DP 以及全局平衡二叉树实现的动态 DP 学习笔记
    矩阵乘法求斐波那契数列的第\(n\)项,其中\(n\le10^{18}\),对数\(m\)取模。写出转移方程,\(f_i=f_{i-1}+f_{i-2}\),直接算是\(O(n)\)的,似乎没什么办法优化。定义大小分别为\(n\timesp\)和\(p\timesm\)的矩阵(分别为\(a\)和\(b\))相乘的结果(矩阵\(c\))是一个大小为\(......
  • 题解:SP11469 SUBSET - Balanced Cow Subsets
    SP11469(折半搜索)题目大意:给出$N$个数,求可以被分成两个和相等的集合的子集数。思路分析:首先考虑朴素的DFS,每个数有三种情况:选为$A$集合,选为$B$集合,两个集合都不选。暴力DFS时间复杂度为$3^{20}$。观察到$N$很小,而$3^{10}$是可以通过本题的,于是考虑折半搜索。我......
  • 状压DP
    状压DP状压DP是动态规划的一种,通过将状态压缩为整数来达到优化转移的目的。例题https://www.luogu.com.cn/problem/P1896思路一行中所有放置的状态可以用二进制数表示:如01000111(1代表当前位置放置物品)因此,我们可以先找出所有的合法状态,(利用dfs进行递归)并用sit[i]记录第......