Untitled
unknown
plain_text
2 years ago
2.4 kB
5
Indexable
#include <iostream>
#define N 20
#define oo 2000000009
using namespace std;
int n,m,sr,sc;
//dam chay
int k;
//ho
int ho;
//thoat
int ex;
int a[20][20];
bool h[20][20];
bool thoat[20][20];
bool chay[N][N];
int vs[N][N],kc[N][N];
int dd[N][N];
int ans;
int min(int u, int v)
{
if(u>v)return v;
return u;
}
int max(int u, int v)
{
if(u>v)return u;
return v;
}
void doc()
{
ans=-1;
int u,v;
cin>>n>>m>>sr>>sc;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
a[i][j]=0;
dd[i][j]=0;
kc[i][j]=oo;
thoat[i][j]=chay[i][j]=h[i][j]=false;
}
cin>>k;
for(int i=1;i<=k;i++)
{
cin>>u>>v;
chay[u][v]=true;
}
cin>>ho;
for(int i=1;i<=ho;i++)
{
cin>>u>>v;
h[u][v]=true;
}
cin>>ex;
for(int i=1;i<=ex;i++)
{
cin>>u>>v;
thoat[u][v]=true;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)cin>>a[i][j];
}
int sx[N*N],sy[N*N];
int hx[]={0,-1,0,1};
int hy[]={-1,0,1,0};
void bfs(int u,int v)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)vs[i][j]=0;
int dau=1,cuoi=0;
vs[u][v]=1;
sx[++cuoi]=u;
sy[cuoi]=v;
while(dau<=cuoi)
{
u=sx[dau];
v=sy[dau];
//cout<<u<<" "<<v<<"\n";
dau++;
for(int i=0;i<4;i++)
{
int xx=u+hx[i];
int yy=v+hy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=m&&vs[xx][yy]==0&&h[xx][yy]!=true)
{
vs[xx][yy]=vs[u][v]+1;
sx[++cuoi]=xx;
sy[cuoi]=yy;
}
}
}
}
void backtrack(int x, int y, int time, int sum)
{
if(kc[x][y]<=time)return;
if(thoat[x][y])
{
ans=max(ans,sum);
//return;
}
for(int i=0;i<4;i++)
{
int u=x+hx[i];
int v=y+hy[i];
if(u>0 && u<=n && v>0 && v<=m)
{
int t;
if(h[u][v])t=2;else t=1;
if(kc[u][v]>time+t && dd[u][v]==0)
{
dd[u][v]=1;
backtrack(u,v,time+t,sum+a[u][v]);
dd[u][v]=0;
}
}
}
//return;
}
int main()
{
//freopen("input.txt","r",stdin);
int TC;
cin>>TC;
for(int tc =1;tc<=TC;tc++)
{
doc();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)if(chay[i][j])
{
bfs(i,j);
for(int u=1;u<=n;u++)
for(int v=1;v<=m;v++)if(vs[u][v])kc[u][v]=min(kc[u][v],vs[u][v]-1);
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)cout<<kc[i][j]<<" ";
cout<<"\n";
}*/
dd[sr][sc]=1;
backtrack(sr,sc,0,a[sr][sc]);
cout<<"Case #"<<tc<<"\n";
cout<<ans<<"\n";
}
return 0;
}Editor is loading...