记录编号 536045 评测结果 AAAAAAAAAA
题目名称 [Poetize 9] 升降梯上 最终得分 100
用户昵称 GravatarDeacep 是否通过 通过
代码语言 C++ 运行时间 0.139 s
提交时间 2019-07-06 17:42:00 内存使用 13.76 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m;
int usles;
int c[25];
struct ud{
	int flo;
	int con;
	int t;
	bool operator < (ud x)const{
		return t>x.t;
	}
	ud(int a,int b,int c):flo(a),con(b),t(c){};
};
//vector<ud> p[1001][21];
int dis[1001][21];
bool vis[1001][21];
void dij(){
	memset(vis,0,sizeof(vis));
	memset(dis,0x3f,sizeof(dis));
	dis[1][usles]=0;
	priority_queue<ud> q;
	q.push(ud(1,usles,0));
	while(!q.empty()){
		while(vis[q.top().flo][q.top().con]) q.pop();
		ud tp=q.top();
		vis[tp.flo][tp.con]=1;
		q.pop();
		for(int i=1;i<=m;i++){
			if(c[i]+tp.flo>=1&&c[i]+tp.flo<=n){
			if(dis[c[i]+tp.flo][i]>dis[tp.flo][tp.con]+abs(c[i])*2+abs(i-tp.con)){
				dis[c[i]+tp.flo][i]=dis[tp.flo][tp.con]+abs(c[i])*2+abs(i-tp.con);
				q.push(ud(c[i]+tp.flo,i,tp.t+abs(c[i])*2+abs(i-tp.con)));
			}
			}
		}
	}
}
int main(){
	freopen("updown.in","r",stdin);
	freopen("updown.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++) {cin>>c[i];(!c[i])&&(usles=i);}
	dij();
	int miku=dis[0][0];
	for(int i=1;i<=m;i++)
	miku=min(miku,dis[n][i]);
	if(miku==dis[0][0])
	cout<<-1;
	else
	cout<<miku;
	return 0;
}