bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【dp】

写了个bfs发现MLE了...
设f[t][i][j]为在t时刻走到(i,j)的方案数,转移和bfs一样

#include<iostream>
#include<cstdio>
using namespace std;
const int N=105,dx[]={1,-1,0,0},dy[]={0,0,-1,1};
int n,m,T,f[20][N][N],x1,y1,x2,y2;
char c[N][N];
inline bool ok(int x,int y)
{
	return x>=1&&x<=n&&y>=1&&y<=m&&c[x][y]!='*';
}
int main()
{
	scanf("%d%d%d",&n,&m,&T);
	for(int i=1;i<=n;i++)
		scanf("%s",c[i]+1);
	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
	f[0][x1][y1]=1;
	for(int t=1;t<=T;t++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				if(c[i][j]!='*')
					for(int k=0;k<4;k++)
						if(ok(i+dx[k],j+dy[k]))
							f[t][i][j]+=f[t-1][i+dx[k]][j+dy[k]];
	printf("%d\n",f[T][x2][y2]);
	return 0;
}
/*
4 5 6
...*.
...*.
.....
.....
1 3 1 5
*/
posted @ 2018-04-27 14:06  lokiii  阅读(71)  评论(0编辑  收藏  举报