动态规划题目练习

news2024/9/24 15:28:34

基础知识:

动态规划背包问题-CSDN博客

动态规划基础概念-CSDN博客

题目练习:

 题目1:过河卒

题目描述

棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示,A 点 (0,0)、B 点 (n,m),同样马的位置坐标是需要给出的。

现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入格式

一行四个正整数,分别表示 B 点坐标和马的坐标。

输出格式

一个整数,表示所有的路径条数。

输入输出样例

输入 #1复制

6 6 3 3

输出 #1复制

6

说明/提示

对于 100% 的数据,1≤n,m≤20,0≤马的坐标≤20。

【题目来源】

NOIP 2002 普及组第四题

代码加注释:

#include<stdio.h>  
#include<string.h>  
  
// 定义一个二维数组dp,用于存储到达每个位置的不同路径数  
long long int dp[100][100];  
// 定义一个二维数组s,用于标记障碍物位置  
bool s[100][100];  
  
int main() {  
	// 初始化dp数组为0  
	memset(dp, 0, sizeof(dp));  
	  
	int x, y, x1, y1;  
	// 输入起始点和终点坐标  
	scanf("%d%d%d%d", &x, &y, &x1, &y1);  
	  
	// 将坐标值加2,这样坐标(1,1)在数组中的位置就是(3,3),以便在数组边界外有空间  
	x += 2, y += 2, x1 += 2, y1 += 2;  
	  
	// 定义八个方向的偏移量,用于标记障碍物周围的位置  
	int next[8][2] = { {1,2},{1,-2},{2,1},{2,-1},{-1,-2},{-2,-1},{-1,2},{-2,1} };  
	  
	// 将终点标记为障碍物  
	s[x1][y1] = 1;  
	  
	// 将终点周围八个方向的位置也标记为障碍物  
	for (int i = 0; i < 8; i++) {  
		s[x1 + next[i][0]][y1 + next[i][1]] = 1;  
	}  
	  
	// 初始化起点位置到起点的路径数为1  
	dp[2][1] = 1;  
	  
	// 动态规划计算到达每个位置的不同路径数  
	for (int i = 2; i <= x; i++) {  
		for (int j = 2; j <= y; j++) {  
			// 如果当前位置是障碍物,则跳过  
			if (s[i][j]) continue;  
			// 当前位置的不同路径数等于它左边和上边位置的不同路径数之和  
			dp[i][j] = dp[i][j - 1] + dp[i - 1][j];  
		}  
	}  
	  
	// 输出从起点到终点的不同路径数  
	printf("%lld", dp[x][y]);  
  
	return 0;  
}
//注意:

//代码中使用x += 2, y += 2, x1 += 2, y1 += 2是为了让实际坐标映射到数组dp和s时留有边界空间,
//防止数组越界。
//dp[i][j]保存的是到达位置(i, j)的不同路径数。
//s[i][j]用于标记障碍物位置,其中true表示是障碍物,false表示不是障碍物。
//动态规划过程中,通过累加左边和上边位置的路径数来更新当前位置的路径数。

 题目2:装箱问题

题目描述

有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积。

现在从 n 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。

输入格式

第一行共一个整数 V,表示箱子容量。

第二行共一个整数 n,表示物品总数。

接下来 n 行,每行有一个正整数,表示第 i 个物品的体积。

输出格式

共一行一个整数,表示箱子最小剩余空间。

输入输出样例

输入 #1复制

24
6
8
3
12
7
9
7

输出 #1复制

0

说明/提示

对于 100%100% 数据,满足0<n≤301≤V≤20000。

【题目来源】

NOIP 2001 普及组第四题

代码加解析:

#include<stdio.h>  // 引入标准输入输出库  
#include<iostream> // 引入输入输出流库,但实际上代码中并未使用iostream的功能  
using namespace std; // 使用标准命名空间  
  
int a[100]; // 定义一个整型数组a,用于存储n个物品的价值  
int dp[20100]; // 定义一个整型数组dp,用于存储容量为j时的最大价值  
  
int main()  
{  
    int V, n; // 定义两个整型变量V和n,分别表示背包的总容量和物品的数量  
    scanf("%d%d", &V, &n); // 输入背包的总容量V和物品的数量n  
  
    for (int i = 1; i <= n; i++) {  
        scanf("%d", &a[i]); // 输入每个物品的价值,并存储在数组a中  
    }  
  
    dp[0] = 0; // 初始化dp数组,当容量为0时,最大价值为0  
  
    // 动态规划的主体部分  
    for (int i = 1; i <= n; i++) { // 遍历每个物品  
        for (int j = V; j >= a[i]; j--) { // 遍历背包的每个可能容量,从大到小遍历是为了保证每个物品只被选取一次  
            dp[j] = max(dp[j], dp[j - a[i]] + a[i]); // 更新dp数组,如果当前物品能放入背包并且加上当前物品后的总价值更大,则更新dp[j]  
        }  
    }  
  
    printf("%d", V - dp[V]); // 输出剩余容量,即总容量V减去最大价值dp[V],即表示背包装不下的物品总价值  
  
    return 0; // 主函数返回0,表示程序正常结束  
}

 题目3:小A点菜

题目背景

uim 神犇拿到了 uoi 的 ra(镭牌)后,立刻拉着基友小 A 到了一家……餐馆,很低端的那种。

uim 指着墙上的价目表(太低级了没有菜单),说:“随便点”。

题目描述

不过 uim 由于买了一些书,口袋里只剩 M 元 (M≤10000)。

餐馆虽低端,但是菜品种类不少,有 N 种 ((N≤100),第 i 种卖 ai​ 元 (ai​≤1000)。由于是很低端的餐馆,所以每种菜只有一份。

小 A 奉行“不把钱吃光不罢休”,所以他点单一定刚好把 uim 身上所有钱花完。他想知道有多少种点菜方法。

由于小 A 肚子太饿,所以最多只能等待 11 秒。

输入格式

第一行是两个数字,表示 N 和 M。

第二行起 N 个正数 ai​(可以有相同的数字,每个数字均在 10001000 以内)。

输出格式

一个正整数,表示点菜方案数,保证答案的范围在 int 之内。

输入输出样例

输入 #1复制

4 4
1 1 2 2

输出 #1复制

3

说明/提示

2020.8.29,增添一组 hack 数据 by @yummy

代码加详细解析:

#include<stdio.h>  
  
// 定义两个数组,a用于存储菜品的价格,dp用于存储动态规划的状态  
int a[200];  
int dp[200][10000];  
  
int main()  
{  
	int n, m;  
	scanf("%d%d", &n, &m); // 输入菜品的种类数n和拥有的钱数m  
  
	// 读取每种菜品的价格  
	for (int i = 1; i <= n; i++) {  
		scanf("%d", &a[i]);  
	}  
  
	// 初始化dp数组,dp[0][0]表示没有菜品可选且钱数为0时的方法数为1(不选任何菜品)  
	dp[0][0] = 1;  
  
	// 动态规划的主体部分  
	for (int i = 1; i <= n; i++) { // 遍历每种菜品  
		for (int j = 0; j <= m; j++) { // 遍历当前拥有的钱数  
			// 如果当前钱数大于菜品价格  
			if (j >= a[i]) {  
				// 则可以选择购买当前菜品,方法数等于不购买当前菜品的方法数加上购买当前菜品后剩余钱数的方法数  
				dp[i][j] = dp[i - 1][j] + dp[i - 1][j - a[i]];  
			} else {  
				// 如果当前钱数小于菜品价格,则不能购买当前菜品,方法数等于不购买当前菜品的方法数  
				dp[i][j] = dp[i - 1][j];  
			}  
		}  
	}  
  
	// 输出在拥有m元钱时,可以选择的菜品组合方法数  
	printf("%d", dp[n][m]);  
  
	return 0;  
}

题目会隔几天更新一次,一直到对这个知识点熟练为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534171.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试算法-68-将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视…

力扣---子集---回溯(子集型回溯)---递归

递归法思路&#xff1a; 首先考虑为什么能用递归&#xff08;因为存在大问题和小问题之间的关系&#xff0c;大问题&#xff1a;从第 i 个数字到最后一个数字之间找子集&#xff0c;小问题&#xff1a;从第 i1 个数字到最后一个数字之间找子集&#xff09;。其次&#xff0c;用…

新版 mac 浏览器乱码

现象 如下图&#xff0c;chrome 浏览器有的乱码了 解决方法 删除字体集中的微软雅黑&#xff08;下图已删除&#xff09;&#xff0c;右键移除

aac可以直接改成mp3吗?快速转换的3个方法~

AAC&#xff08;Advanced Audio Coding&#xff09;文件格式的诞生源于对音频压缩技术的不断追求。由Fraunhofer IIS、杜比实验室、AT&T、索尼等联合开发&#xff0c;旨在提供更高质量的音频压缩效果。AAC文件格式因其出色的音质和高效的压缩算法&#xff0c;成为数字音频领…

NVIDIA NCCL 源码学习(十三)- IB SHARP

背景 之前我们看到了基于ring和tree的两种allreduce算法&#xff0c;对于ring allreduce&#xff0c;一块数据在reduce scatter阶段需要经过所有的rank&#xff0c;allgather阶段又需要经过所有rank&#xff1b;对于tree allreduce&#xff0c;一块数据数据在reduce阶段要上行…

Linux中路径正确但是就是查找不到某个文件

显示文件不存在 Py4JJavaError&#xff1a;调用 o223.partitions 时出错。 &#xff1a; org.apache.hadoop.mapred.InvalidInputException&#xff1a; 输入路径不存在&#xff1a; 首先确定路径是否正确&#xff0c;文件是否存在 然后右键文件查看属性&#xff0c;确定文件…

matlab simulink 电力系统同步发电机励磁系统的建模与仿真

1、内容简介 略 77-可以交流、咨询、答疑 电力系统同步发电机励磁系统的建模与仿真 建立MATLAB的同步发电机励磁调节系统仿真模型&#xff0c;最后建立了以PID和PSS为励磁控制方式的同步发电机励磁调节系统数学模型&#xff0c;在Simulink环境下进行了仿真&#xff0c;收到…

爬虫逆向sm3和sm4 加密 案例

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 案例--aHR0cDovLzExMS41Ni4xNDIuMTM6MTgwODgvc3Vic2lkeU9wZW4 第一步&#xff1a;分析页面和请求方式 …

C++利用开散列哈希表封装unordered_set,unordered_map

C利用开散列哈希表封装unordered_set,unordered_map 一.前言1.开散列的哈希表完整代码 二.模板参数1.HashNode的改造2.封装unordered_set和unordered_map的第一步1.unordered_set2.unordered_map 3.HashTable 三.string的哈希函数的模板特化四.迭代器类1.operator运算符重载1.动…

Vue2(七):脚手架、render函数、ref属性、props配置项、mixin(混入)、插件、scoped样式

一、脚手架结构&#xff08;Vue CLI&#xff09; ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ …

未来已来?国内10家AI大模型盘点(附体验网址)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、阿里云——通义千问2、科大讯飞——星火大模…

Cookie使用

文章目录 一、Cookie基本使用1、发送Cookie2、获取Cookie 二、Cookie原理三、Cookie使用细节 一、Cookie基本使用 1、发送Cookie package com.itheima.web.cookie;import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.I…

嵌入式开发--获取STM32产品系列的信息

嵌入式开发–获取STM32产品系列和容量信息 获取STM32产品系列 有时候我们需要知道当前MCU是STM32的哪一个系列&#xff0c;这当然可以从外部丝印看出来&#xff0c;但是运行在内部的软件如何知道呢&#xff1f; ST为我们提供了一个接口&#xff0c;对于STM32的所有MCU&#x…

宏宇、萨米特、新明珠、金意陶、简一、科达、力泰、道氏、SITI BT、POPPI……35家参展商发布亮点

3月18日&#xff0c;2024佛山潭洲陶瓷展&#xff08;4月18-22日&#xff09;亮点发布会在广东新媒体产业园成功举办&#xff0c;主题为“我们不一样”。 陶城报社社长、佛山潭洲陶瓷展总经理李新良代表主办方&#xff0c;发布了2024佛山潭洲陶瓷展的“不一样”&#xff1b;佛山…

TikTok账号用什么IP代理比较好?

对于运营TikTok的从业者来说&#xff0c;IP的重要性自然不言而喻。 在其他条件都正常的情况下&#xff0c;拥有一个稳定&#xff0c;纯净的IP&#xff0c;你的视频起始播放量很可能比别人高出不少&#xff0c;而劣质的IP轻则会限流&#xff0c;重则会封号。那么&#xff0c;如何…

FPGA - SPI总线介绍以及通用接口模块设计

一&#xff0c;SPI总线 1&#xff0c;SPI总线概述 SPI&#xff0c;是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。串行外设接口总线(SPI)&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的…

Day16:LeedCode 104.二叉树的最大深度 111.二叉树最小深度 222.完全二叉树的结点个数

104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 思路:根结点最大深度max(左子树最大深度,右子树最大深度)1 终止条件,结点为null,该结点最大深度为0 class Solution {publ…

【什么是Internet?网络边缘,网络核心,分组交换 vs 电路交换,接入网络和物理媒体】

文章目录 一、什么是Internet&#xff1f;1.从具体构成角度来看2.从服务角度来看 二、网络结构1.网络边缘1.网络边缘&#xff1a;采用网络设施的面向连接服务1.1.目标&#xff1a;在端系统之间传输数据1.2.TCP服务 2.网络边缘&#xff1a;采用网络设施的无连接服务2.1目标&…

MT管理器 使用手册

MT管理器 论坛&#xff1a;https://bbs.binmt.cc/ 使用技巧系列教程&#xff1a;https://www.52pojie.cn/thread-1259872-1-1.html MT管理器 使用手册 &#xff1a;https://mt2.cn/guide/&#xff1a;https://www.bookstack.cn/read/mt-manual/80b8084f6be128c0.md&#xff…

HC-SR501人体红外传感器

一、传感器介绍 二、代码 void infrared_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);GPIO_InitStructure.GPIO_Pin GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN;GPIO_InitStructure.GPIO_OT…