当前位置: 首页 > news >正文

C++过河卒问题

#include <iostream>
#include <cstring>
using namespace std;int board[20][20]; // 棋盘
int dp[20][20][20][20]; // 动态规划数组int main() {int x0, y0, x1, y1;cin >> x0 >> y0 >> x1 >> y1;  // 输入卒的起点和终点memset(board, 0, sizeof(board));  // 初始化棋盘// 初始化动态规划数组memset(dp, 0, sizeof(dp));dp[x0][y0][0][0] = 1;for(int i = x0; i <= x1; i++) {for(int j = y0; j <= y1; j++) {if(board[i][j] == 1) continue;  // 如果该点有障碍物则跳过if(i > x0) dp[i][j][i-x0][0] += dp[i-1][j][i-x0-1][0];  // 上方的状态转移if(j > y0) dp[i][j][0][j-y0] += dp[i][j-1][0][j-y0-1];  // 左方的状态转移}}cout << dp[x1][y1][x1-x0][y1-y0] << endl;  // 输出方案数return 0;
}

        其中,动态规划数组 dp[i][j][x][y] 表示从起点 (x0, y0) 到当前点 (i, j) ,沿途经过了 x 行、y 列,一共有多少种方案。初始状态为 dp[x0][y0][0][0] = 1,表示从起点出发,沿途未经过行或列的方案数为 1。

状态转移方程为:

dp[i][j][x][y] = dp[i-1][j][x-1][y] (如果 i > x0 && board[i][j] != 1)+ dp[i][j-1][x][y-1] (如果 j > y0 && board[i][j] != 1)
其中,board[i][j] 表示棋盘上点 (i, j) 是否有障碍物。如果该点有障碍物,则不能通过该点。最终,需要输出 dp[x1][y1][x1-x0][y1-y0]
http://www.lryc.cn/news/235484.html

相关文章:

  • 【机器学习12】集成学习
  • nodeJs基础笔记
  • Skywalking流程分析_9(JDK类库中增强流程)
  • 矩阵的QR分解
  • STL总结
  • 资深测试总结,现在软件测试有未来吗?“你“的底气在哪里?
  • Scalable Exact Inference in Multi-Output Gaussian Processes
  • sqli-labs(Less-3)
  • 集合框架面试题
  • 【LeetCode刷题日志】225.用队列实现栈
  • 【JavaScript】fetch 处理流式数据,实现类 chatgpt 对话
  • 收发电子邮件
  • sql13(Leetcode570至少有5名直接下属的经理)
  • 15分钟,不,用模板做数据可视化只需5分钟
  • C 语言字符串函数
  • nvm安装详细教程(卸载旧的nodejs,安装nvm、node、npm、cnpm、yarn及环境变量配置)
  • 详细步骤记录:持续集成Jenkins自动化部署一个Maven项目
  • Python学习(一)基础语法
  • 【C刷题】day7
  • 数据挖掘复盘——apriori
  • Windows10下Maven3.9.5安装教程
  • 【开源】基于JAVA的校园失物招领管理系统
  • requests爬虫IP连接初始化问题及解决方案
  • Argo Rollouts结合Service进行Blue-Green部署
  • mongodb——原理简介,docker单机部署
  • ThinkPHP 系列漏洞
  • 系列十、你说你做过JVM调优和参数配置,请问如何盘点JVM系统的默认值?
  • Java Web——Web开发介绍
  • Vue 数据监听机制及 Vue 2.0 和 Vue 3.0 的比较
  • QT多线程项目中子线程无法修改主线程的ui组件