• bzoj1616[Usaco2008 Mar]Cow Travelling游荡的奶牛*


    bzoj1616[Usaco2008 Mar]Cow Travelling游荡的奶牛

    题意:

    n行m列的草地上有一些位置有障碍物。第0时刻奶牛在(r1,c1),第t时刻奶牛在(r2,c2)(注意这里都是行在前,列在后),求奶牛走的方案数。n,m≤100,t≤15。

    题解:

    dp。f[i][j][k]表示当前为第i时刻,在j行k列,则f[i][j][k]=f[i+1][j-1][k]+f[i+1][j+1][k]+f[i+1][j][k-1]+f[i+1][j][k+1],前提是这些位置不出边界且不为障碍物。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 110
     5 #define inc(i,j,k) for(int i=j;i<=k;i++)
     6 #define dec(i,j,k) for(int i=j;i>=k;i--)
     7 using namespace std;
     8 
     9 int n,m,t,x[maxn][maxn],y[maxn][maxn],x1,y1,x2,y2; char map[maxn][maxn];
    10 int main(){
    11     scanf("%d%d%d",&n,&m,&t); inc(i,1,n)scanf("%s",map[i]+1); scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x[x2][y2]=1;
    12     dec(i,t,1){
    13         memset(y,0,sizeof(y));
    14         inc(j,1,n)inc(k,1,m){
    15             if(j+1<=n&&map[j+1][k]!='*')y[j][k]+=x[j+1][k];
    16             if(j-1>=1&&map[j-1][k]!='*')y[j][k]+=x[j-1][k];
    17             if(k+1<=m&&map[j][k+1]!='*')y[j][k]+=x[j][k+1];
    18             if(k-1>=1&&map[j][k-1]!='*')y[j][k]+=x[j][k-1];
    19         }
    20         swap(x,y);
    21     }
    22     printf("%d",x[x1][y1]); return 0;
    23 }

    20160802

  • 相关阅读:
    排序算法比较
    直接选择排序
    静态查找表和动态查找表
    memset函数
    二叉树
    使用vue+Element的Upload+formData实现图片传到SpringBoot,再上传到fastdfs
    vue中的export与export default的区别
    人人开源
    SpringBoot注解
    大厂薪资
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5732524.html
Copyright © 2020-2023  润新知