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

猜你喜欢

转载自www.cnblogs.com/lokiii/p/8962161.html