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

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://xiahunao.cn/news/2871398.html

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

相关文章

疑难杂症!handleSubmit does not execute onSubmit function

背景 今天在写Nextjs代码的时候&#xff0c;发现一个问题&#xff0c;我使用react-use-form的表单&#xff0c;点击提交按钮的时候&#xff1a;onSubmit没有被触发&#xff01;&#xff01; 于是排查 源代码如下&#xff1a; "use client"import { AddLinkReques…

ros小问题之差速轮式机器人轮子不显示(rviz gazebo)

在rviz及gazebo练习差速轮式机器人时&#xff0c;很奇怪&#xff0c;只有个机器人的底板及底部的两个万向轮&#xff0c;如下图&#xff0c; 后来查看相关.xacro文件&#xff0c;里面是引用包含了轮子的xacro文件&#xff0c;只需传入不同的参数即可调用生成不同位置的轮子&…

数据结构——lesson8二叉树的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

如何使用人工智能打造超用户预期的个性化购物体验

回看我的营销职业生涯&#xff0c;我见证了数字时代如何重塑客户期望。从一刀切的方法过渡到创造高度个性化的购物体验已成为企业的关键。在这个客户期望不断变化的新时代&#xff0c;创造个性化的购物体验不再是奢侈品&#xff0c;而是企业的必需品。人工智能 &#xff08;AI&…

UnityShader(十六)凹凸映射

前言&#xff1a; 纹理的一种常见应用就是凹凸映射&#xff08;bump mapping&#xff09;。凹凸映射目的就是用一张纹理图来修改模型表面的法线&#xff0c;让模型看起来更加细节&#xff0c;这种方法不会改变模型原本的顶点位置&#xff08;也就是不会修改模型的形状&#xf…

资深老鸟经验,性能测试-性能指标分析总结,一篇策底概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试指标 1、…

146 Linux 网络编程2 ,Socket编程,如何创建Linux 服务器 和linux 客户端

IPport 就是一个程序在网络上的身份证号码。 这意味着我们需要如果写一个服务器&#xff0c;至少需要将这台服务器的ip 和 端口号写到程序里面。 实际上更细化的说&#xff1a;应该是将这三都写进程序里面 &#xff1a; IP类型&#xff08;IPV4或者IPV6&#xff09;&#xff…

Anaconda安装proplot库

看了一下Anaconda中的环境&#xff0c;现在我有4个&#xff0c;其中gee是一个虚拟环境 因此一般在prompt中装库时要先进入其中一个虚拟环境 conda activate geepip install proplot --no-deps下完了之后&#xff0c;发现版本不对应 conda install matplotlib3.4.3

面试算法-39-删除链表的倒数第 N 个结点

题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 解 class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {L…

【Linux】进程信号{初识信号/常见的信号/中断信号/信号的产生}

文章目录 0.浅谈中断信号1.初识信号2.中断信号3.信号的产生测试&#xff1a;SIGINT 4.core dump核心转储5.系统接口产生信号5.1kill给指定发5.2raise向自己发5.3abort自己给自己发6 6.由于软件条件不满足产生信号6.1SIGPIPE6.2SIGALRM 7. 硬件异常产生信号7.1除零错误7.2野指针…

云服务器容器常用操作系统介绍

常用操作系统介绍 开源软件国内镜像源Alpine操作系统介绍镜像源修改镜像源apk包管理器 Debian操作系统介绍镜像源修改镜像源apt包管理器 ubuntu操作系统介绍修改镜像源apt包管理器 CentOS操作系统介绍修改镜像源yum包管理器 开源软件国内镜像源 名称地址南京大学mirror.nju.ed…

奇酷网络董事长吴渔夫:AI时代的工作节奏

奇酷网络董事长吴渔夫今日分享&#xff1a; 1、从2024年春节后上班至今&#xff0c;我每天都是工作16小时的。除了睡觉时间段&#xff0c;其它时间都在工作&#xff1b;连吃个饭也是一边吃一边看手机&#xff0c;阅读AI新闻、学习Sora和AI知识的。 2、我的工作方式&#xff0…

22 OpenCV 直方图计算

文章目录 直方图概念split 通道分离函数calcHist 计算直方图normalize 归一化函数示例 直方图概念 上述直方图概念是基于图像像素值&#xff0c;其实对图像梯度、每个像素的角度、等一切图像的属性值&#xff0c;我们都可以建立直方图。这个才是直方图的概念真正意义&#xff0…

PHP魔术方法详解

php魔术方法是一些特殊的方法&#xff0c;由特定的环境来进行触发。 这些魔术方法让开发者能够更好地控制对象的行为&#xff0c;特别是在处理不常见的操作或者需要自动化处理某些任务时非常有用。 1、_construct()构造函数&#xff1a; <?php highlight_file(__FILE__);…

【静夜思】为什么我们会如此喜欢夜晚呢

作为一名大学生&#xff0c;熬夜对我来说已是常态。每天都是近乎一点钟才有困意&#xff0c;觉得应该上床睡觉了&#xff0c;即使明天早八&#xff0c;即使明天有很多课。我也观察过身边的朋友&#xff0c;他们中大多数也和我一样&#xff0c;基本都是在12点过后才入睡。当今的…

DDL - 建立数据库,建表代码版(Way 2)

一、DB操作 show databases; create database DBOFRYX; drop database DBOFRYX; use DBOFRYX; 二、表操作&#xff08;表和表结构、字段是A、B两姐妹&#xff09; (1) use DBOFRYX; show tables; (2) create table TABOFRYX( name varchar(50) comment "姓名"…

【SpringBoot3】整合Druid数据源和Mybatis 项目打包和运行

文章目录 一、整合Druid数据源二、整合Mybatis2.1 MyBatis整合步骤2.1 Mybatis整合实践2.1 声明式事务整合配置2.1 AOP整合配置 三、项目打包和运行命令启动和参数说明 总结web 与 springboot 打包区别JDK8的编译环境 执行17高版本jar 一、整合Druid数据源 创建模块 &#xff1…

Cloudways搭建WordPress外贸独立站完整教程

现在做个网站不比从前了&#xff0c;搭建网站非常的简单&#xff0c;主要是由于开源的CMS建站系统的崛起&#xff0c;就算不懂编程写代码的人也能搭建一个自己的网站&#xff0c;这些CMS系统提供了丰富的主题模板和插件&#xff0c;使用户可以通过简单的拖放和配置操作来建立自…

Ubuntu Desktop - Open a New Window

Ubuntu Desktop - Open a New Window 1. Open a New WindowReferences 1. Open a New Window References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:TabContent)

仅在Tabs中使用&#xff0c;对应一个切换页签的内容视图。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 说明&#xff1a; 可内置系统组件和自定义组件&#xff0c;支…