【动态规划】经典例题

article/2025/10/7 4:12:05

一.动态规划三要素

1.最优子结构

2.状态转移方程 (核心)(一般用打表找出规律)

3.边界值

二.背包问题

(一.题目)

1.1题目描述

现在有一个背包但容量有限,最多只能装m千克宝石!有n个宝石,每个宝石都有自己的重量m和价值c。求可以装的宝石的最大价值。

1.2输入输出描述

        输入:两个整数m和n,表示背包最大容量和宝石数量

                   接下来的n行分别表示每个宝石的重量和价值

        输出:可以装的宝石的最大价值

1.3样例

输入:

8 3
2 3
5 4
5 5

输出:

8

(二.思路)

 打表找规律

 (三.核心代码)

//外遍历宝石数量 for(int i=1;i<=n;i++){//内遍历背包容量 for(int j=1;j<=m;j++){//装不下 if(j<w[i]){f[i][j]=f[i-1][j]; }//装得下 else{//状态转移方程 f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+c[i]); }}}

(四.【AC代码】)

#include<iostream>
using namespace std;
int w[1001],c[1001];  //分别表示物体重量和价值
int f[1001][1001];  //表示物体编号为i,背包容量为j时,最大价值 
int main(){int m,n;cin>>m>>n;for(int i=1;i<=n;i++){cin>>w[i]>>c[i];}//外遍历宝石数量 for(int i=1;i<=n;i++){//内遍历背包容量 for(int j=1;j<=m;j++){//装不下 if(j<w[i]){f[i][j]=f[i-1][j]; }//装得下 else{//状态转移方程 f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+c[i]); }}}//输出最优解cout<<f[n][m]; return 0;
}

三.买宝石

(一.题目)

1.1题目描述

假设我们有v(1 <v<25)种宝石,顾客需要价值n(1<n≤1000)元的宝石,刚好能买够n元的方案有多少种?

1.2输入输出描述

输入:

一个整数v表示有v种宝石,一个整数n表示有n元

v个整数分别表示每种宝石的价格

输出:

有多少种购买方案

1.3样例

输入:

3 8
1 2 5

输出:
7

(二.思路)

根据打表,可以找到边界和状态转移方程

说明:i为多少种宝石,j表示价值

1.我们可以得到边界为:(1)f[0][j]=0,f[i][0]=1;

                                        (2)if(i>1) for(j=0;j<p;j++)  f[i][j]=f[i-1][j];

2. 我们得到状态转移方程为:f[i][j]=f[i-1][j]+f[i][j-p]   //i为当前宝石的价格

(三.核心代码) 

(四.【AC】代码)

#include<iostream>
using namespace std;
int v,n,p,i,j;
int f[1001][1001]; 
int main(){cin>>v>>n;for(i=1;i<=v;i++){cin>>p;//边界 f[i][0]=1;if(i>1){for(j=0;j<p;j++) f[i][j]=f[i-1][j];}//状态转移方程 for(j=p;j<=n;j++){f[i][j]=f[i-1][j]+f[i][j-p];}}cout<<f[v][n];return 0;
}


http://chatgpt.dhexx.cn/article/KEWjGP8s.shtml

相关文章

【动态规划专栏】--基础-- 动态规划经典题型

目录 动态规划 动态规划思维&#xff08;基础&#xff09; 状态表示&#xff08;最重要&#xff09; 状态转移方程&#xff08;最难&#xff09; 初始化&#xff08;细节&#xff09; 填表顺序&#xff08;细节&#xff09; 返回值&#xff08;结果&#xff09; 1、第 …

动态规划入门详解 内含12道经典动态规划编程题

动态规划入门详解 一 什么是动态规划&#xff1f;&#xff1f; 算法导论中介绍&#xff0c;动态规划和分治方法类似&#xff0c;都是听过子问题的解来解决原问题。下面说一下这2者之间的分别&#xff0c;分治方法将原问题划分为互不相交的子问题&#xff0c;而后将子问题组合…

【刷题日记】动态规划经典题目

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

Linux命令-sftp文件传输

搭建SFTP服务详见博文&#xff1a;https://blog.csdn.net/cen50958/article/details/90722874 连接SFTP 可使用&#xff1a;sftp --help 查看SFTP的连接参数 [rootstudy ~]# sftp --help usage: sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config] [-o ssh_option…

Linux命令(三):SFTP

目录 1、登录 2、文件上传 3、文件下载 4、删除文件/文件夹 5、实战 1、登录 sftp userip 你要用sftp, 当然得登录到sftp服务器&#xff0c; 在linux的shell中执行上面的命令后&#xff0c; linux shell会提示用户输入密码&#xff0c; 我们就输入password吧。 这样就成功…

Linux常用命令——sftp命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) sftp 交互式的文件传输程序 补充说明 sftp命令是一款交互式的文件传输程序&#xff0c;命令的运行和使用方式与ftp命令相似&#xff0c;但是&#xff0c;sftp命令对传输的所有信息使用ssh加密&#xff0c;它还…

SFTP命令常用操作

SFTP相关(等价于rz/sz&#xff0c;此方式适用于没有工具的情况下&#xff0c;前提是保证sftp默认端口22开放) lcd 本地文件路径 进入到本地的某个目录下 cd 远程文件路径 进入到远程的某个目录下 lpwd 显示本地的当前目录的路径 pwd 显示远程的当前目录的路径 这里只介绍常…

SFTP基本功之get、put命令操作

简述 在安装好linux系统之后&#xff0c;开始不断安装部署各种工具&#xff0c;其中很多工具版本太老使得无法使用wget下载&#xff0c;而只能用put命令从本地硬盘中上传之linux系统内安装&#xff0c;而当我编写系统克隆mongodb数据库时&#xff0c;又了解到了get命令&#x…

SFTP命令的使用,sftp传文件

背景&#xff1a;从Windows系统向类unix系统传送文件&#xff0c;使用Windows系统自带的SFTP命令进行文件传送(不用下载F开头&#xff0c;X开头的ftp工具) 背景分割线 上干货&#xff1a;1.WinX&#xff0c;按A&#xff0c;输入SFTP root192.168.162.236 回车&#xff1b; &…

SFTP登录及命令行用法

sftp命令行登录过程 ① sftp xxx.xxx.xxx.xxx 登录&#xff08;默认root用户&#xff09;&#xff0c;若指定用户 sftp bluexxx.xxx.xxx.xxx 进行登录&#xff08;blue为用户名&#xff09; ② 登录成功后&#xff0c;会提示输入 密码 ③ 然后&#xff0c;可进入目录&#xf…

SFTP命令用法(上传和下载 )

一、SFTP SFTP是Secure File Transfer Protocol的缩写&#xff0c;安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分&#xff0c;是一种传输档案至Blogger伺服器的安全方式。其实在SSH软件包中&…

Linux基础命令 sftp命令的使用

SFTP&#xff08;Secure File Transfer Protocol&#xff0c;安全文件传输协议&#xff09;是一种基于可靠数据流&#xff08;data stream&#xff09;&#xff0c;提供文件存取和管理的网络传输协议&#xff0c;与 FTP 协议相比&#xff0c;SFTP 在客户端与服务器间提供了一种…

sftp常用命令介绍

sftp常用命令&#xff1a; 1. sftp 登录sftp服务器 sftp userip ​​​​​​ 如需要看全部命令&#xff1a;则使用help即可 2. pwd和lpwd 、 ls和lls 、cd和lcd 等 sftp登录之后默认操作是远程服务器&#xff0c;当需要操作本地时&#xff0c;就需要在前边加“l”&#…

Linux中使用sftp的常用命令

前言 在数据库远程维护的过程中&#xff0c;经常需要和本机进行数据的交互&#xff0c;常用的交互方式为ftp&#xff0c;但是这种方式需要确保21端口和ftp服务都存在。在远程访问服务器的时候大部分使用ssh来进行连接&#xff0c;其使用的端口为22端口&#xff0c;与之共用的数…

单链表的基本操作-查找

【问题描述】 实现有头结点单链表查找算法&#xff1a;根据关键字值查找其在单链表中的位置(第一次出现的位置)。 【输入形式】 第一行输入整数n&#xff08;n不大于1000&#xff09;&#xff0c;表示单链表长度&#xff1b; 第二行输入若干个整数&#xff08;以非法整数或…

单链表的基本操作(C语言+图解分析)

目录 一、单链表的建立 1、头插法 2、尾插法 二、插入结点操作 三、删除节点操作 四、单链表操作的一些常见问题 1、结构体变量和结构体指针的区别&#xff1f; 2、什么时候要malloc&#xff1f; 3、形参里面出现了取地址符(&)&#xff0c;有什么作用&#xff1f;…

c++单链表的基本操作(全)

俩个基本插入方法 #include <bits/stdc.h> using namespace std; typedef struct LNode { int date; //节点的数据域 struct LNode *next; //节点的指针域 }LNode,*LinkList; // LinkList 为指向结构体LNode的指针类型bool Initlist_L(LinkList &L) …

单链表的基本操作(学习总结)

单链表的声明初始化&#xff1a; 1.头文件&#xff1a; 这里不做太多说明&#xff0c;是学习C语言的基础。 #include<stdio.h> #include<stdlib.h> 2.结构声明&#xff1a; 数据结构算法中&#xff0c;每个表&#xff0c;树&#xff0c;图类的工具组都需要定义它…

Java 实现单链表的基本操作

顺序表&#xff1a;物理上逻辑上都连续&#xff1b; 链表&#xff1a;物理上不一定连续&#xff0c;逻辑上一定连续的。 链表的概念及结构 概念&#xff1a;连表示一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是用过链表中的引用链接次序实现的…

数据结构:单链表的基本操作

单链表是一种链式存取的数据结构&#xff0c;用一组地址任意的存储单元存放线性表中的数据元素。这组存储单元可以是连续的&#xff0c;也可以是不连续的。链表中的数据是以结点来表示的&#xff0c;一个结点包含数据域和指针域&#xff0c;数据域用来存储结点的值&#xff0c;…