动态规划题目练习

基础知识:

动态规划背包问题-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.rhkb.cn/news/281150.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebGIS管线在线编辑器(电力、水力、燃气、热力、热能管线)

随着GIS等信息技术的发展&#xff0c;地下管线管理也从二维平面向三维立体管理迈进。传统管线信息管理系统将管线及其附属设施抽象成二维平面内的点、要素&#xff0c;并使用各类点符号、不同颜色线段进行表达。虽能一定程度上满足城市智慧运行的需要&#xff0c;但不能很直观的…

【Linux】文件描述符 - fd

文章目录 1. open 接口介绍1.1 代码演示1.2 open 函数返回值 2. 文件描述符 fd2.1 0 / 1 / 22.2 文件描述符的分配规则 3. 重定向3.1 dup2 系统调用函数 4. FILE 与 缓冲区 1. open 接口介绍 使用 man open 指令查看手册&#xff1a; #include <sys/types.h> #include …

02. Java 中的关键字、标识符、运算符、分隔符和注释

关键字 Java 的关键字(keyword、保留字)是 Java 语言中具有特殊含义的单词&#xff0c;它们被保留供 Java 自身使用&#xff0c;不能被用作标识符。例如 public、class、void、int 等都是关键字。 关键字在 Java 语法中起着重要的作用&#xff0c;它们定义了编程的结构、控制…

Python 深度学习第二版(GPT 重译)(一)

前言 序言 如果你拿起这本书&#xff0c;你可能已经意识到深度学习在最近对人工智能领域所代表的非凡进步。我们从几乎无法使用的计算机视觉和自然语言处理发展到了在你每天使用的产品中大规模部署的高性能系统。这一突然进步的后果几乎影响到了每一个行业。我们已经将深度学…

【数据结构与算法】(13):冒泡排序和快速排序

&#x1f921;博客主页&#xff1a;Code_文晓 &#x1f970;本文专栏&#xff1a;数据结构与算法 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&…

揭秘2024云渲染平台优惠陷阱!有些看似划算实则很坑

近年来&#xff0c;随着云渲染技术的飞速发展&#xff0c;越来越多的人开始关注并使用云渲染平台。然而其中隐藏着一些消费陷阱&#xff0c;需要我们谨慎小心。有时候一些平台看似优惠&#xff0c;实际上可能是一个深不见底的坑。 今天小编就来对比分析2024年市面上主流的五款云…

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…

外包干了5天,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

exporter方式监控达梦数据库

蓝鲸监控 随着国产化和信创的深入&#xff0c;开始普遍使用国产化数据库–如达梦数据库&#xff0c;蓝鲸平台默认没有对其进行监控&#xff0c;但是平台了提供监控告警的能力。比如脚本采集&#xff0c;脚本的是一种灵活和快速的监控采集方式&#xff0c;不同层的监控对象都可…

SqlServer数据库复习总结资料

基于课堂上学到的以及书上的看到的&#xff0c;总结出的数据库复习资料 一、数据库概述 基本概念 1.数据 数据&#xff08;Data&#xff09;是事物的符号表示&#xff0c;可以是声音、图像、文字、数字&#xff0c;也可以是计算机代码。 2.数据库 数据库&#xff08;DataBase…

pytorch之诗词生成6--eval

先上代码&#xff1a; import tensorflow as tf from dataset import tokenizer import settings import utils# 加载训练好的模型 model tf.keras.models.load_model(r"E:\best_model.h5") # 随机生成一首诗 print(utils.generate_random_poetry(tokenizer, model)…

WebXR实践——利用aframe框架浏览器展示全景图片

一、效果 话不多说&#xff0c;先上效果 二、代码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>360&deg; Image</title><meta name"description" content"360&deg; Imag…

JavaSE:数据类型与变量

目录 一、前言 二、数据类型与变量 &#xff08;一&#xff09;字面常量 &#xff08;二&#xff09;数据类型 &#xff08;三&#xff09;变量 1.变量概念 2.语法格式 3.整型变量 3.1整型变量 3.2长整型变量 3.3短整型变量 3.4字节型变量 4.浮点型变量 4.1双精…

REDHAWK——连接(续)

文章目录 前言一、突发 IO1、数据传输①、输入②、输出 2、突发信号相关信息 (SRI)3、多输出端口4、使用复数数据①、在 C 中转换复数数据 5、时间戳6、端口统计①、C 二、消息传递1、消息生产者①、创建一个消息生产者②、发送消息 2、消息消费者①、创建消息消费者②、注册接…

01mysql

登陆mysql 默认数据库 进入&#xff0c;展示&#xff0c;删除 &#xff0c;查看当前正使用的库 select version()查看版本 查看表结构desc 查询 not in不会忽略空 in会自动忽略 like模糊查询 %o%中间带o的 _A%第二个字母是A的 查名字是下划线的 %\_% 排序 order …

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

docker的部署与安装以及部署一个docker(容器)应用及docker容器常出现的问题

docker 架构图 一、docker的部署与安装 1、在 CentOS 上安装 Docker 移除旧版本&#xff08;如果有的话&#xff09;&#xff1a;sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-…

MySQL 索引的分类和优化

​ 优质博文&#xff1a;IT-BLOG-CN 索引是什么 &#xff1a; MySQL 官方对索引的定义&#xff1a;索引&#xff08;Index&#xff09;是帮助 MySQL 高效获取数据的数据结构。可以得到索引的本质&#xff1a;索引是数据结构。索引的目的在于提高查询效率。可以简单理解为&#…

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一&#xff1a; 方法二&#xff08;推荐&#xff09; 将相关资源下载下来&#xff0c;在对应的html文件中相对路径引入。注意&#xff1a;css加载放在js之前

java框架 2 springboot 过滤器 拦截器 异常处理 事务管理 AOP

Filter 过滤器 对所有请求都可以过滤。 实现Filter接口&#xff0c;重写几个方法&#xff0c;加上WebFilter注解&#xff0c;表示拦截哪些路由&#xff0c;如上是所有请求都会拦截。 然后还需要在入口处加上SvlterComponentScan注解&#xff0c;因为Filter是javaweb三大组件之…