青蛙

3 篇文章 0 订阅

青蛙1

题目描述
有N块宝石,编号为1,2,…,N。对于每个i(1≤i≤N),石头i的高度为hi。
最初有一只青蛙在Stone 1上。他将重复几次以下动作才能到达Stone N:
如果青蛙当前在Stone i上,则跳到Stone i + 1或Stone i + 2。这里,| hi-hj |的成本 发生,其中j是要落在上面的石头。
找到青蛙到达Stone N之前可能发生的最小总成本 。
约束
输入中的所有值都是整数。
2≤N≤10^5
1≤hi≤10^4
输入
输入来自标准输入,格式如下:
N
h1 h2…hN
输出
打印可能的最低总成本。
样例输入
【样例1】
4
10 30 40 20
【样例2】
2
10 10
【样例3】
6
30 10 60 10 60 50
样例输出
【样例1】
30
【样例2】
0
【样例3】
40
提示
样例1解释:如果我们沿着路径1→2→4,则产生的总成本为| 10−30 | + | 30−20 | = 30。
样例2解释:如果我们沿着路径1→2,样例总成本为| 10−10 | = 0。
样例3:如果按照路径1→3→5→6进行计算,则总成本为| 30−60 | + | 60−60 | + | 60−50 | = 40。
分析: s[i]表示到达Stone i的最小成本,所以s[n]最小只能是s[n-1]+abs(a[n]-a[n-1])和s[n-2]+abs(a[n]-a[n-2])中的一个,以此类推只要求出s[i-1]和s[i-2]就能求出s[i]。(注意初始化a[0]=a[1],不然a[2]-a[0]会出错)

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
int a[100010],s[100010],n;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    a[0]=a[1];
    for(int i=2;i<=n;i++)
    {
        s[i]=min(s[i-1]+abs(a[i]-a[i-1]),s[i-2]+abs(a[i]-a[i-2]));
    }
    cout<<s[n]<<endl;
    return 0;
}

青蛙2

题目描述
有N块宝石,编号为1,2,…,N。对于每个i(1≤i≤N),石头i的高度为hi。
最初有一只青蛙在石头1上。他将重复几次此动作才能到达石头N:
如果青蛙当前在石头i上,则跳至以下之一:石头
i + 1,i + 2 ,…,i + K。这里,| hi-hj |的成本 发生,其中j是要落在上面的石头。
找到青蛙到达Stone N之前可能发生的最小总成本 。
约束
输入中的所有值都是整数。
2≤N≤10^5
1≤K≤100
1≤hi≤10^4
输入
输入来自标准输入,格式如下:
NK
h1 h2…hN
输出
打印可能的最低总成本。
样例输入
【样例1】
5 3
10 30 40 50 20
【样例2】
3 1
10 20 10
【样例3】
2 100
10 10
【样例4】
10 4
40 10 20 70 80 10 20 70 80 60
样例输出
【样例1】
30
【样例2】
20
【样例3】
0
【样例4】
40
提示
样例1解释:如果我们沿着路径1→2→5,则总费用为| 10−30 | + | 30−20 | = 30。
样例2解释:如果我们沿着路径1→2→ 3,发生的总成本为| 10-20 | + | 20−10 | = 20。
样例3解释:如果按照路径1→2,则发生的总成本为| 10-10 | = 0。
样例4解释:如果我们沿着路径1→4→8→10,则总费用为| 40-70 | + | 70-70 | + | 70-60 | = 40。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[100010],s[100010],n,k,kk;
int main()
{
    cin>>n>>k;
    for(int i=1; i<=n; i++)
    {
        cin>>a[i];
    }
    a[0]=a[1];
    for(int i=2; i<=n; i++)
    {
        s[i]=s[i-1]+abs(a[i]-a[i-1]);
        if(i<k) kk=i;
        else kk=k;
        for(int j=2;j<=kk;j++)
        {
            int x=abs(a[i]-a[i-j]);
            s[i]=min(s[i],s[i-j]+x);
        }
    }
    cout<<s[n]<<endl;
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值