Acwing-基础算法课笔记之动态规划(计数类DP)

news2025/1/11 23:40:30

Acwing-基础算法课笔记之动态规划(计数类DP)

  • 一、整数划分
    • 1、定义
    • 2、完全背包的做法
      • 代码示例
      • (1)过程模拟
      • (2)代码示例
    • 3、计数类DP的做法
      • (1)过程模拟
      • (2)闫氏DP分析法
      • (3)代码示例

一、整数划分

1、定义

一个正整数 n可以表示成若干个正整数之和,形如:
n = n 1 + n 2 + . . . + n k n=n_1+n_2+...+n_k n=n1+n2+...+nk,其中 n 1 ≥ n 2 ≥ . . . ≥ n k , k ≥ 1 n_1\ge n_2\ge...\ge n_k,k\ge1 n1n2...nk,k1

举例:
假设要将 5 5 5划分,以下是划分的情况:
5 = 5 5=5 5=5
5 = 1 + 4 5=1+4 5=1+4
5 = 2 + 3 5=2+3 5=2+3
5 = 1 + 1 + 3 5=1+1+3 5=1+1+3
5 = 1 + 2 + 2 5=1+2+2 5=1+2+2
5 = 1 + 1 + 1 + 2 5=1+1+1+2 5=1+1+1+2
5 = 1 + 1 + 1 + 1 + 1 5=1+1+1+1+1 5=1+1+1+1+1

2、完全背包的做法

状态表示:
d p [ i ] [ j ] dp[i][j] dp[i][j]表示只从 1 ∼ i 1\sim i 1i中选,且总和等于 j j j的方案数

状态转移方程:
f [ i ] [ j ] = f [ i − 1 ] [ j ] + f [ i ] [ j − i ] f[i][j]=f[i-1][j]+f[i][j-i] f[i][j]=f[i1][j]+f[i][ji]
其中 f [ i − 1 ] [ j ] f[i-1][j] f[i1][j]指的是当物品装不进背包时,前 i − 1 i-1 i1个物品当中最大价值, f [ i ] [ j − i ] f[i][j-i] f[i][ji]指的是装的下的情况。(此为个人理解,如果有不对的地方请纠正错误)

代码示例

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
int n;
int dp[N];
int mod = 1e9 + 7;
int main() {
	scanf("%d", &n);
	dp[0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			dp[j] = (dp[j] + dp[j - i]) % mod;
		}
	}
	printf("%d", dp[n]);
	return 0;
}

(1)过程模拟

012345
0100000
1111111
2102233
3100345
4100056
5100007

上表中,列表示的是最终和的值,行表示和值最多由 j j j个数相加, d p [ i ] [ j ] dp[i][j] dp[i][j]则是表示的是方案个数。

(2)代码示例

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
int n;
int dp[N];
int mod = 1e9 + 7;
int main() {
	scanf("%d", &n);
	dp[0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			dp[j] = (dp[j] + dp[j - i]) % mod;
		}
	}
	printf("%d", dp[n]);
	return 0;
}

3、计数类DP的做法

(1)过程模拟

012345
0100000
1010000
2011000
3011100
4012110
5012211

上表中,列表示的是总和 i i i,行表示有 j j j个数相加, d p [ i ] [ j ] dp[i][j] dp[i][j]则是表示的是有 j j j个数相加构成 i i i的数量。

(2)闫氏DP分析法

在这里插入图片描述

(3)代码示例

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
int n;
int dp[N][N];
int mod = 1e9 + 7;
int main() {
	scanf("%d", &n);
	dp[0][0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= i; j++) {
			dp[i][j] = (dp[i - 1][j - 1] + dp[i - j][j]) % mod;
		}
	}
	int ans = 0;
	for (int i = 1; i <= n; i++)ans = (ans + dp[n][i]) % mod;
	printf("%d", ans);
	return 0;
}

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

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

相关文章

文件包含漏洞(input、filter、zip)

一、PHP://INPUT php://input可以访问请求的原始数据的只读流&#xff0c;将post请求的数据当作php代码执行。当传入的参数作为文件名打开时&#xff0c;可以将参数设为php://input,同时post想设置的文件内容&#xff0c;php执行时会将post内容当作文件内容。从而导致任意代码…

Gogs 创建新的仓库并提交代码

Gogs 创建新的仓库并提交代码 1. 登录2. 仓库 -> 我的仓库3. 创建新的仓库4. 仓库5. Copy6. 公开代码​7. 提交成功 Gogs - gitReferences Gogs 是一款极易搭建的自助 Git 服务。 1. 登录 2. 仓库 -> 我的仓库 3. 创建新的仓库 4. 仓库 5. Copy 6. 公开代码 strongfo…

【MySQL】表的约束(2)

【MySQL】表的约束&#xff08;2&#xff09; 目录 【MySQL】表的约束&#xff08;2&#xff09;自增长唯一键外键综合案例-阅读 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2024.3.13 前言&#xff1a;本篇博客主要是介绍表的约束下部分内容(自增长&#xff0c;唯一键&a…

计算机考研|怎么备考「科软」?

学好408和考研数学就可以了 大家对于科软已经回到了理性的区间&#xff0c;很难再出现刚开始的300分上科软的现象&#xff0c;也不会再出现388分炸穿地心的现象。 如果大家想报考科软&#xff0c;我觉得一定要认真对待复习&#xff0c;不要抱有抄底的心态去复习。 众所周知&am…

QtCreate cmake 和qmake 使用调用动态库流程

链接&#xff1a; QtCreate cmake 和qmake 使用调用静态库流程-CSDN博客 重点&#xff1a; 1.流程和静态库一样。 2.只是在include下放置所需的dll。 3.cmakelist.txt中的文件路径并未变化。

Selenium抓取youtube视频推荐

Youtube作为一个全球最大的视频资源平台&#xff0c;对于视频资源有很好的规整处理。所以当我们想要抓取一些视频资源时&#xff0c;它本身提供的API能力不符合时&#xff0c;我们需要使用Selenium去抓取视频。 以下是根据一条视频链接去抓取推荐列表的功能&#xff1a; asyn…

不锈钢多功能电工剥线钳分线绕线剪线剥线钳剥线压线扒皮钳子

品牌&#xff1a;银隆 型号&#xff1a;089B绿色 材质&#xff1a;镍铬钢&#xff08;不锈钢&#xff09; 颜色分类&#xff1a;089B灰色,089B红色,089B绿色,089B黑色,089B橙色 功能齐集一身&#xff0c;一钳多用&#xff0c;多功能剥线钳。剥线&#xff0c;剪线&#xff…

前端三件套 | 综合练习:模拟抽奖活动,实现一个简单的随机抽取并显示三名获胜者

随机运行结果如下&#xff1a; 参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

分数相加减(C语言)

一、流程图&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int fenmu 2;int result 1;int fuhao 1;//执行循环&#xff1b;while (fenmu < 100){//运算&#xff1b;fuhao (-1…

深度学习1650ti在win10安装pytorch复盘

深度学习1650ti在win10安装pytorch复盘 前言1. 安装anaconda2. 检查更新显卡驱动3. 根据pytorch选择CUDA版本4. 安装CUDA5. 安装cuDNN6. conda安装pytorch结语 前言 建议有条件的&#xff0c;可以在安装过程中&#xff0c;开启梯子。例如cuDNN安装时登录 or 注册&#xff0c;会…

Redis应用与原理(一)

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 缓存发展史 缓存经典场景 在没有引入缓存前&#xff0c;为了应对大量流量&#xff0c;一般采用&#xff1a; LVS 代理Nginx 做负载均衡搭建 Tomcat 集群 这种方式下&#xff0c;随着访问量的增大&#xf…

Python 蜂窝六边形分析

在本文中,我们将使用 Wildland Fire Interagency Geospatial Services (WFIGS) 2022 数据集,并仅关注新墨西哥州的 Hermits Peak / Calf Canyon 火灾。这场野火是该州历史上规模最大的野火,烧毁面积超过 30 万英亩。大火位于陶斯和圣达菲之间,烧毁了桑格雷德克里斯托山脉的…

继承 ResponseEntityExceptionHandler

目录 作用概述 示例-HttpRequestMethodNotSupportedException 示例-自定义异常处理 总示例 使用了ResponseEntityExceptionHandler后&#xff0c;为什么发生了异常后返回体为空 方法执行顺序 作用概述 这是一个方便的基类&#xff0c;用于希望通过 ExceptionHandler 方法…

centos7修改ssh登录错误限制和端口修改

前几天登录服务器的时候发现有错误登录信息15w多条&#xff0c;该服务器映射了外网&#xff0c;估计是被爆破了。为了防止再有人进行爆破&#xff0c;修改一下ssh的限制登录顺便把默认端口改掉 编辑ssh配置文件 vim /etc/ssh/sshd_config去掉注释 按需修改次数 MaxAuthTries 6…

云服务器2核4G5M配置代表什么意思?

腾讯云服务器2核4G5M带宽配置是代表什么&#xff1f;代表2核CPU、4G内存、5M公网带宽&#xff0c;这是一款轻量应用服务器&#xff0c;系统盘为60GB SSD云硬盘&#xff0c;活动页面 txybk.com/go/txy 活动打开如下图&#xff1a; 腾讯云2核4G5M服务器 如上图所示&#xff0c;这…

EDA事件驱动架构/BASE理论/幂等性理论

EDA事件驱动架构&#xff1a;Event Driven Architecture 消息组件&#xff1a;不仅仅是削峰填谷 而且可以做事件驱动架构 EDA驱动的特定&#xff1a;异步处理、跨平台/语言通信、应用解耦、可靠投递、最终一致性 BASE理论&#xff1a; 基本可用 Basically Available 软状态 …

JavaScript做一个贪吃蛇小游戏,无需网络直接玩。

用JavaScript做一个贪吃蛇小游戏&#xff0c;无需网络 > 打开即可玩。 html代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>Title</title><style>#game{width: 344p…

json-server库的使用,实现数据模拟

项目目录 安装 npm i -g json-server0.17.4 启动单个json服务&#xff0c;在cookbook目录下执行命令&#xff1a; json-server ./mock/a.json -p 9000 待实现 使用0.17.4版本即可。

BIG-Bench Hard 数据集分享

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-3-17 该数据集由Google、斯坦福等研究人员开发&#xff0c;BBH的全称是BIG-Bench Hard&#xff0c;它是BIG-Bench数据集的一个子集&#xff0c;它专…

前端工程化(二)(精品、面试必备基础)(春招、秋招)

目录 什么是模块化?CommonJS规范和Node关系模块化的核心exports 导出 & require 导入模块加载(持续更新) 什么是模块化? 事实上模块化开发最终的目的是将程序划分成一个个小的结构&#xff1b; 这个结构中编写属于自己的逻辑代码&#xff0c;有自己的作用域&#xff0c;…