• BZOJ_1616_[Usaco2008_Mar]_Cow_Travelling_游荡的奶牛_(DP)


    描述


    http://www.lydsy.com/JudgeOnline/problem.php?id=1616

    给出一张图,有些点不能走,给出起始点和结束点,以及时间,求在该时间到达结束点的方案数.

    分析


    直接DP即可.

    (f[i][j][k])表示在(i)时间走到((j,k))的方案数.

    在(i)时间从点((a,b))走到((c,d)):

    (f[i][c][d]+=f[i-1][a][b]).

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn=100+5;
     5 int n,m,t,r1,c1,r2,c2;
     6 int go[][2]={-1,0,0,-1,1,0,0,1};
     7 int f[20][maxn][maxn];
     8 bool Map[maxn][maxn];
     9 char c;
    10 inline int read(int &x){ x=0;int k=1;char c;for(c=getchar();c<'0'||c>'9';c=getchar())if(c=='-')k=-1;for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0';return x*=k; }
    11 inline char read(char &c){ for(c=getchar();c!='.'&&c!='*';c=getchar());return c; }
    12 int main(){
    13     read(n); read(m); read(t);
    14     for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) Map[i][j]=read(c)=='.'?true:false;
    15     read(r1); read(c1); read(r2); read(c2);
    16     f[0][r1][c1]=1;
    17     for(int i=1;i<=t;i++)for(int j=1;j<=n;j++)for(int k=1;k<=m;k++)if(Map[j][k])for(int q=0;q<4;q++){
    18         int dx=j+go[q][0],dy=k+go[q][1];
    19         if(dx<=0||dx>n||dy<=0||dy>m||!f[i-1][dx][dy]) continue;
    20         f[i][j][k]+=f[i-1][dx][dy];
    21     }
    22     printf("%d
    ",f[t][r2][c2]);
    23     return 0;
    24 }
    View Code

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 1060  Solved: 584
    [Submit][Status][Discuss]

    Description

    奶 牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草。Farmer John在某个时刻看见贝茜在位置 (R1, C1),恰好T (0 < T <= 15)秒后,FJ又在位置(R2, C2)与贝茜撞了正着。 FJ并不知道在这T秒内贝茜是否曾经到过(R2, C2),他能确定的只是,现在贝茜在那里。 设S为奶牛在T秒内从(R1, C1)走到(R2, C2)所能选择的路径总数,FJ希望有一个程序来帮他计算这个值。每一秒内,奶牛会水平或垂直地移动1单位距离(奶牛总是在移动,不会在某秒内停在它上一 秒所在的点)。草地上的某些地方有树,自然,奶牛不能走到树所在的位置,也不会走出草地。 现在你拿到了一张整块草地的地形图,其中'.'表示平坦的草地,'*'表示挡路的树。你的任务是计算出,一头在T秒内从(R1, C1)移动到(R2, C2)的奶牛可能经过的路径有哪些。

    Input

    * 第1行: 3个用空格隔开的整数:N,M,T

    * 第2..N+1行: 第i+1行为M个连续的字符,描述了草地第i行各点的情况,保证 字符是'.'和'*'中的一个 * 第N+2行: 4个用空格隔开的整数:R1,C1,R2,以及C2

    Output

    * 第1行: 输出S,含义如题中所述

    Sample Input

    4 5 6
    ...*.
    ...*.
    .....
    .....
    1 3 1 5

    输入说明:

    草地被划分成4行5列,奶牛在6秒内从第1行第3列走到了第1行第5列。

    Sample Output

    1

    奶牛在6秒内从(1,3)走到(1,5)的方法只有一种(绕过她面前的树)。

    HINT

    Source

    Silver

  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/Sunnie69/p/5612155.html
Copyright © 2020-2023  润新知