比赛 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;
}