BJTU1853 gangpener 买零食
题目:
gangpener 非常宠爱他的妹妹。
今天妹妹让 gangpener 去零食大厦买零食,零食大厦高 𝑛 层,除了第一层外,每层各有一种妹妹想吃的零食。零食大厦每层有 𝑚 个摊位,分别在位置 1,位置 2,…,位置 𝑚。每个相邻的摊位距离为 1。 每层只有位置 1 和位置 𝑚 能上下楼。 据 gangpener 调查,第 𝑖(𝑖≥2) 层的零食在第 𝑖 层的 𝑎𝑖 位置。 现在gangpener 在第 1 层的 1 位置,需要买完所有零食后回到第 1 层的 1 位置。 gangpener 想尽快买完所有零食送给妹妹, 如何规划购买路线可以让 gangpener 走的路最少呢?(不计上下楼路程)
[这里本来有gangpener和他妹妹的照片,但被gangpener吃掉了]
输入数据:
第一行为两个整数 𝑛,𝑚(2≤𝑛≤100,2≤𝑚≤100)。
第二行为 𝑛−1 个整数 𝑎2,𝑎3,⋯,𝑎𝑛(1≤𝑎𝑖≤𝑚),每个数字用空格分隔。
输出数据:
输入:
3 10
10 9
输出:
18
分析:
这个题基本的分析方法就是比较两种到达下一目的地方式的距离长短,那么让每一次都是最短的那个方法就可以了,就把这个大问题分解为了很多小问题,最后把这些最短的距离累加。
代码:
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int n,m;
int p[101] = {0};
int ans = 0;
cin>>n>>m;
p[1] = 1;
p[n+1] = 1;
for(int i = 2;i <=n;i++)
{
cin>>p[i];
}
for(int i = 2;i <= n+1;i++)
{
ans += min(p[i] - 1 + p[i-1] -1,m - p[i] + m - p[i-1]);
}
cout<<ans<<endl;
return 0;
}