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
*/