比赛 |
20150421 |
评测结果 |
WEEWEEEEEW |
题目名称 |
飞越原野 |
最终得分 |
0 |
用户昵称 |
ggwdwsbs |
运行时间 |
1.216 s |
代码语言 |
C++ |
内存使用 |
3.81 MiB |
提交时间 |
2015-04-21 11:58:35 |
显示代码纯文本
#include<stdio.h>
#include<cstring>
const int maxn=101;
const int INF=2147483600;
int f[maxn][maxn][maxn];
char map[maxn][maxn];
int dx[5]={0,0,1,0,-1};
int dy[5]={0,1,0,-1,0};
int n,m,D;
int min(int x,int y)
{
if(x>y) return y;
else return x;
}
int main()
{
freopen("escapea.in","r",stdin);
freopen("escapea.out","w",stdout);
scanf("%d%d%d",&n,&m,&D);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
char c=getchar();
if(c!='L'&&c!='P') c=getchar();
map[i][j]=c;
}
for(int i=0;i<=m;i++)
map[i][0]='L',map[i][n+1]='L';
for(int j=0;j<=n;j++)
map[0][j]='L',map[m+1][j]='L';
memset(f,127/3,sizeof(f));
f[1][1][0]=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
for(int k=0;k<=i+j-2;k++)
{
for(int d=1;d<=4;d++)
{
int x=i+dx[d],y=j+dy[d];
if(map[x][y]=='P')
{
f[x][y][k]=min(f[x][y][k],f[i][j][k]+1);
}
for(int h=k+1;h<=D;h++)
if(map[i+dx[d]*(h-k)][j+dy[d]*(h-k)]=='P')
{
f[i+dx[d]*(h-k)][j+dy[d]*(h-k)][h]=min(f[i+dx[d]*(h-k)][j+dy[d]*(h-k)][h],f[i][j][k]+1);
}
}
}
int ans=INF;
for(int k=0;k<=D;k++)
ans=min(ans,f[m][n][k]);
printf("%d",ans);
}