zoukankan      html  css  js  c++  java
  • dfs+dp——[Usaco2008 Mar]Cow Travelling游荡的奶牛

    dp[i][j][k]记录在i,j格子里,剩下k步可以到达终点的路径条数
    View Code
    #include<stdio.h>
    #include
    <iostream>
    #include
    <math.h>
    using namespace std;

    bool map[109][109];
    int fa,fb,ea,eb,add;
    int f[4][2]={0,-1,-1,0,0,1,1,0};
    int dp[109][109][19];
    int n,m,all;

    int dfs(int a,int b,int step)
    {
    if(dp[a][b][step]!=-1)return dp[a][b][step];
    if((abs(a-ea)+abs(b-eb))>step)//曼哈顿路径剪枝
    return dp[a][b][step]=0;

    if(step==0)
    {
    if(a==ea&&b==eb)
    return dp[a][b][0]=1;
    else
    return dp[a][b][0]=0;
    }

    int i;
    dp[a][b][step]
    =0;
    for(i=0;i<=3;i++)
    {
    int sa,sb,sstep;
    sa
    =a+f[i][0];
    sb
    =b+f[i][1];
    sstep
    =step-1;

    if(sa>=1&&sa<=n&&sb>=1&&sb<=m&&map[sa][sb]==0)
    {
    dp[a][b][step]
    +=dfs(sa,sb,sstep);
    }
    }
    return dp[a][b][step];
    }

    int main()
    {
    while(scanf("%d%d%d",&n,&m,&all)!=EOF)
    {
    int i,j,k;
    char t;
    for(i=1;i<=n;i++)
    {
    getchar();
    for(j=1;j<=m;j++)
    {
    scanf(
    "%c",&t);
    if(t=='*')
    map[i][j]
    =1;
    else
    map[i][j]
    =0;
    for(k=0;k<=all;k++)
    dp[i][j][k]
    =-1;
    }
    }

    scanf(
    "%d%d",&fa,&fb);
    scanf(
    "%d%d",&ea,&eb);
    add
    =0;
    int te;

    te
    =dfs(fa,fb,all);

    printf(
    "%d\n",te);
    }
    return 0;
    }
  • 相关阅读:
    Proxies
    内置的Symbol值
    css兼容问题大全
    Jquery ajax方法详解
    Ajax笔记
    Jquery笔记
    Css3笔记
    JavaScript学习笔记
    10 款优秀的文件管理插件推荐
    初始化和预装载servlet与JSP页面
  • 原文地址:https://www.cnblogs.com/huhuuu/p/1993058.html
Copyright © 2011-2022 走看看