列表

详情


NC21653. 巨型迷宫

描述

有一个n行数字迷宫,每行都有无穷多个数,问你从起点走到终点经过的数字和的最小值,包括起点终点上面的数字。
每一次可以走上下左右相邻的任意一个格子

这个数字迷宫比较特殊,每一列都是一模一样的。
现在给你一个数组a,a[i] 表示第i行的数字是什么


再给你sx,sy, ex,sy分别表示起点与终点

输入描述

第一行输入一个整数n,sx,sy,ex,ey表示行数与起点终点

第二行输入n个数表示每一行的数字

1<=n<=50, 1<=a[i]<=1000

0<=sx,ex<=n-1, 0<=sy,ey<=109

输出描述

输出一个整数

示例1

输入:

3 2 0 2 2
5 3 10

输出:

29

示例2

输入:

3 0 2 0 0
5 3 10

输出:

15

示例3

输入:

1 0 0 0 0
1

输出:

1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 488K, 提交时间: 2022-07-31 00:57:54

#include<bits/stdc++.h>
#include<numeric>
using namespace std;
int main()
{
	int n,i,j,sx,sy,ex,ey;long long a[55],aa=0,bb=0,count=1e13;
	cin>>n>>sx>>sy>>ex>>ey;
	for(i=0;i<n;i++)
		cin>>a[i];
	for(i=0;i<n;i++)
	{
		for(j=min(i,sx);j<=max(i,sx);j++)
			aa+=a[j];
		for(j=min(i,ex);j<=max(i,ex);j++)
			bb+=a[j];
		if(sy!=ey)
			count=min(a[i]*(abs(sy-ey)-1)+aa+bb,count);
		else
			count=min(aa+bb-a[i],count);
		aa=0;
		bb=0;	
	}
	cout<<count;
	return 0;
}

上一题