记录编号 |
536045 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[Poetize 9] 升降梯上 |
最终得分 |
100 |
用户昵称 |
Deacep |
是否通过 |
通过 |
代码语言 |
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;
}