P1002 过河卒:图论动态规划入门

本题链接:P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:

  本题与之前的动态规划不一样,比如背包问题和子序列问题等都是线性dp,也就是dp数组其实主要用于存储计算的结果,而这题中的dp数组除了存储结果外,还有 图的作用

  • f[ i ][ j ] 表示走到点(i,j)的路的数
  • 卒只能走右和下,因此 f [ i ] [ j ] += f [ i - 1][ j] + f [ i ][ j - 1] ;

代码:

  ac代码:

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;

int n,m,a,b;//(m,n)是目标点,(a,b)是马
//马的路
int dx[8] = {-1,-2,-2,-1,1,2,2,1};
int dy[8] = {-2,-1,1,2,-2,-1,1,2};
const int N = 30;
int limit[N][N];
long long f[N][N];


int main(){
   cin >> n >> m >> a >> b;
    limit[a][b] = true;
    for(int i = 0;i < 8;i++){
        limit[a + dx[i]][b + dy[i]] = true;
    }
    
    f[0][0] = 1;
    for(int i = 0;i <= n;i++){
        for(int j = 0;j <= m;j++){
            if(!limit[i][j]){
                if(i) f[i][j] += f[i-1][j];
                if(j) f[i][j] += f[i][j-1];
            }
        }
    }
    
    cout << f[n][m];
    
    return 0;
}

在贴一个dfs的代码,过了40/100,其他的超时了

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;

int n,m,a,b;//(m,n)是目标点,(a,b)是马
//马的路
int dx[8] = {-1,-2,-2,-1,1,2,2,1};
int dy[8] = {-2,-1,1,2,-2,-1,1,2};
const int N = 22;
int mp[N][N];
int limit[N][N];
int res = 0;
int dn[2] = {1,0};
int dm[2] = {0,1};

int charge(int x,int y){
    if(x < 0 || x > n || y < 0 || y > m) return false;
    return true;
}

void dfs(int x,int y){
    if(x == n && y == m){
        res ++;
        return;
    }
    
    for(int i = 0;i < 2;i++){
        int nowx = x + dn[i],nowy = y + dm[i];
        if(charge(nowx,nowy) && !limit[nowx][nowy]){
            dfs(nowx,nowy);
        }
    }
}

int main(){
   cin >> n >> m >> a >> b;
    limit[a][b] = true;
    for(int i = 0;i < 8;i++){
        limit[a + dx[i]][b + dy[i]] = true;
    }
    
    dfs(0,0);
    
    cout << res;
    
    return 0;
}

以上是本文全部内容,如果对你有帮助点个赞再走吧~  ₍˄·͈༝·͈˄*₎◞ ̑̑

相关推荐

  1. P1002 动态规划入门

    2024-04-03 05:12:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-03 05:12:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-03 05:12:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-03 05:12:05       82 阅读
  4. Python语言-面向对象

    2024-04-03 05:12:05       91 阅读

热门阅读

  1. 基于 CentOS7 制作 Apache HTTPD 2.4.58 的RPM安装包

    2024-04-03 05:12:05       36 阅读
  2. 简单了解裸眼3D呈现技术

    2024-04-03 05:12:05       29 阅读
  3. gin源码分析(2)gin启动http服务

    2024-04-03 05:12:05       30 阅读
  4. Unity VR背包系统项目(1)

    2024-04-03 05:12:05       28 阅读
  5. 数据分析 -- numpy

    2024-04-03 05:12:05       35 阅读
  6. 物联网虚拟仿真实验教学中心平台建设

    2024-04-03 05:12:05       34 阅读
  7. Python在数据分析与可视化中的深度实践

    2024-04-03 05:12:05       37 阅读
  8. .vimrc文件的语句语法

    2024-04-03 05:12:05       32 阅读
  9. 2024Mathorcup数学建模竞赛A题B题C题D题

    2024-04-03 05:12:05       38 阅读
  10. 服务器是争做时代先锋

    2024-04-03 05:12:05       30 阅读