算法笔记/USACO Guide GOLD金组DP 1. Introduction to DP

news/2024/12/19 9:52:07/

USACO Guide中金组的内容分为一下六个章节

  • DP
  • 数学
  • 图论
  • 数据结构
  • 一些附加主题

今天学习DP,以下内容:

  • 初入DP
  • 背包DP
  • 图表中的路线
  • 最长递增序列
  • 状态压缩DP
  • 区间DP
  • 数位DP

初入DP

Dynamic Programming (DP) is an important algorithmic technique in Competitive Programming from the gold division to competitions like the International Olympiad of Informatics. By breaking down the full task into sub-problems, DP avoids the redundant computations of brute force solutions.

动态规划(DP)是信奥中需要掌握的一种重要算法能力,从金组到国际信息学奥林匹克竞赛(IOI)等。通过将整个任务分解为子问题,DP 避免了强力解决方案的冗余计算。

There are two uses for dynamic programming:

DP的两种用法:

  • Finding an optimal solution: We want to find a solution that is as large as possible or as small as possible.
  • Counting the number of solutions: We want to calculate the total number of possible solutions.
  • 寻找最优解:当题目要求找到尽可能大或尽可能小的解决方案时可以使用DP。
  • 计算解决方案的数量:想要计算可能的解决方案的总数时可以使用DP。

We will first see how dynamic programming can be used to find an optimal solution, and then we will use the same idea for counting the solutions. Understanding dynamic programming is a milestone in every competitive programmer’s career. While the basic idea is simple, the challenge is how to apply dynamic programming to different problems. This chapter introduces a set of classic problems that are a good starting point.

我们将首先了解如何使用动态规划来找到最佳解决方案,然后我们将使用相同的想法来计算解决方案。理解动态编程是每个信奥学生中的一个里程碑。虽然基本思想很简单,但挑战在于如何将动态规划应用于不同的问题。本章介绍了一组经典问题,这是一个很好的起点。


经典问题

Coin Problem 硬币问题

题目

Given a set of coin values coins = {c1, c2,..., ck} and a target sum of money n, our task is to form the sum n using as few coins as possible.

今有面值 = {c1, c2,..., ck} 元的硬币各无限枚,想要凑出 n 元,问需要的最少硬币数量。

解法

Let solve(x) denote the minimum number of coins required for a sum x. The values of the function depend on the values of the coins. 

可以使用递推的方式解决这个问题。假设 solve(x) 函数表示总和 x 所需的最小硬币数量,并且该函数的值取决于硬币的面值。

For example, if coins = {1,3,4}, the first values of the function are as follows:

比如,现在我们有的硬币面值有 1, 3, 4 拿来凑钱币那么函数的答案如下:

solve(0) = 0

solve(1) = 1

solve(2) = 2

solve(3) = 1

solve(4) = 1

solve(5) = 2

solve(6) = 2

solve(7) = 2

solve(8) = 2

solve(9) = 3

solve(10) = 3

从而得出递推公式

solve(x) = min(solve(x−1)+1, solve(x−3)+1, solve(x−4)+1). 

Longest increasing subsequence 最长递增子序列


http://www.ppmy.cn/news/1066646.html

相关文章

DevOps系列文章之 Python基础

元组 元组元素用小括号()包裹,不可以更改(尽管他们的内容可以) 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 可以认为元组是"静态"的列表 元组一旦定义,不能改变 t tuple()t ()t tuple(range(1&…

wireshark抓包

Wireshark是非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括: 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该例子学…

DataSecurity Plus:守护企业数据安全的坚实屏障

在数字化时代,数据被誉为企业最重要的资产之一。然而,随着大数据的兴起和信息的日益增长,企业面临着前所未有的数据安全挑战。为了应对这些挑战,数据安全管理变得至关重要。在这个领域,ManageEngine的DataSecurity Plu…

防溺水预警识别系统算法

防溺水预警识别系统旨在通过opencvpython网络模型深度学习算法,防溺水预警识别系统算法实时监测河道环境,对学生等违规下水游泳等危险行为进行预警和提醒。Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行&#xff0…

二分队列+决策单调性优化dp:P6246

https://www.luogu.com.cn/problem/P6246 决策单调性 若 d p i dp_i dpi​ 由 j j j 转移,则 d p i 1 dp_{i1} dpi1​ 转移点 k k k 满足 k ≥ j k\ge j k≥j 发现决策点满足单调,但遍历的点不满足单调,不能用双指针,考虑…

好用的可视化大屏适配方案

1、scale方案 优点&#xff1a;使用scale适配是最快且有效的&#xff08;等比缩放&#xff09; 缺点&#xff1a; 等比缩放时&#xff0c;项目的上下或者左右是肯定会有留白的 实现步骤 <div className"screen-wrapper"><div className"screen"…

React笔记(一)初识React

一、React概述 1、什么是react react的官网:React 用于构建用户界面的 JavaScript 库&#xff0c;它也是一个渐进式的用于构建用户界面的javascript框架 2、主要特征 声明式&#xff1a;使用原生JS编写的页面存在着开发效率低下、性能较差的情况&#xff0c;使用react大家就…

SQL高级知识点

MySQL基础 1、安装 1)设置编码 2)设置密码 2、配置文件&#xff1a;my.ini、my.cnf 1)设置端口号 port3306 2)设置编码 default-character-setutf8character-set-serverutf8 3)存储引擎 default-storage-engineINNODB 4)最大连接数 max_connections100 注意&…