ソースコード
#include<iostream>
#include<queue>
using namespace std;
int h,w,dx[]={1,0,-1,0},dy[]={0,1,0,-1};
int x[1001],y[1001];
int gx,gy;
int yl,yr,xl,xr;
int d[1001][1001];
main()
{
cin>>h>>w>>gx>>gy;
for(int i=0;i++<h;)cin>>x[i];
for(int i=0;i++<w;)cin>>y[i];
cin>>xl>>xr>>yl>>yr;
for(int i=0;i++<h;)for(int j=0;j++<w;)d[i][j]=1e9;
d[1][1]=0;
queue<pair<int,int> >P;
P.push(make_pair(1,1));
while(!P.empty())
{
int nx=P.front().first,ny=P.front().second;
P.pop();
for(int r=0;r<4;r++)
{
int tx=nx+dx[r],ty=ny+dy[r];
if(tx<=0||ty<=0||tx>h||ty>w)continue;
if(xl<=tx&&tx<=xr&&yl<=ty&&ty<=yr)continue;
int cost=d[nx][ny]+(r%2?x[nx]:y[ny]);
if(d[tx][ty]>cost)
{
d[tx][ty]=cost;
P.push(make_pair(tx,ty));
}
}
}
if(d[gx][gy]<1e9)cout<<d[gx][gy]<<endl;
else cout<<-1<<endl;
}