小松鼠过河

题目描述

一天小松鼠想去到河的对面找他的朋友小熊玩。但是他没有办法直接游过去,只能选择游一小段,然后靠漂浮在水面上的木头跨过去。题目中会把过河的路线抽象成一条数轴,小松鼠开始在数轴零的位置上。每一次小松鼠可以选择向前游一格,或向后游一格。你有一格都算走了一步。如果他爬上了木头,穿过整个木头算一步。

现在题目中会给你一个整数 k,代表河对岸在数轴上的位置。然后题目会再给你一个整数 n 代表河面上漂流的木头的数量。下来 n 行每行会给两个整数,分别代表木头从河的 a 处一直到河的 b 处。现在请你编写代码,帮小松鼠计算,他最小需要几步可以游到河的对岸。

输入输出格式

输入格式第一行两个整数 k,n。接下来 n 行,每行 a,b 两个数。输出格式一个整数。

输入输出样例1

输入10 21 35 8

输出7

输入输出样例2

输入1 10 1

输出1

说明/提示

#include<iostream>
#include<math.h>
#include <string.h>
using namespace std;     //命名空间
int main(){
    int n,m;    //n为木头数量,m为河对岸在数轴上的位置
    cin>>m>>n;
    int dis[234][234];     //定义二维数组
    for(int i=0;i<=m;i++){
        for(int j=1;j<=m;j++){
            dis[i][j]=abs(i-j);    //计算绝对值
        }
    }
    for(int i=0;i<n;i++){    //走的木头的长度
        int x,y;
        cin>>x>>y;
        dis[x][y]=1;
    }
    for(int i=m;i>=0;i--){
        for(int j=0;j<=m;j++){
            for(int k=0;k<=m;k++){
                dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]);
            }
        }    
    }
    cout<<dis[0][m];
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值