比赛 |
20150421 |
评测结果 |
WAAWWWWWWW |
题目名称 |
飞越原野 |
最终得分 |
20 |
用户昵称 |
mikumikumi |
运行时间 |
0.059 s |
代码语言 |
C++ |
内存使用 |
4.20 MiB |
提交时间 |
2015-04-21 11:43:24 |
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,mp[101][101]={0},dp[100][100][101],d;
int maxn=0xffffff;
int ans=maxn;
int main()
{
freopen("escapea.in","r",stdin);
freopen("escapea.out","w",stdout);
scanf("%d%d%d",&m,&n,&d);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
char a;
cin>>a;
if(a=='P')
mp[i][j]=1;
else
mp[i][j]=0;
}
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
for(int k=0;k<=d;k++)
dp[i][j][k]=maxn;
dp[1][1][0]=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j]!=0)
{
if(mp[i-1][j]!=0)
dp[i][j][0]=dp[i-1][j][0]+1;
if(mp[i][j-1]!=0)
dp[i][j][0]=min(dp[i][j-1][0]+1,dp[i][j][0]);
}
for(int k=1;k<=d;k++)
{
if(i-1>0)
{
if(k==1)
dp[i][j][k]=min(dp[i-1][j][k-1]+1,dp[i][j][k]);
else
{
dp[i][j][k]=min(dp[i-1][j][k-1],dp[i-1][j][k]+1);
}
}
if(j-1>0)
{
if(k==1)
dp[i][j][k]=min(dp[i][j-1][k-1]+1,dp[i][j][k]);
else
{
dp[i][j][k]=min(dp[i][j-1][k-1],dp[i][j-1][k]+1);
}
}
//cout<<dp[i][j][k]<<" ";
}
//cout<<dp[2][2][0]<<" ";
}
//cout<<endl;
}
for(int i=0;i<=d;i++)
{
ans=min(ans,dp[m][n][i]);
}
if(ans==maxn)
cout<<"impossible";
else
cout<<ans;
//cout<<dp[2][4][2];
return 0;
}