2024/3/9d打卡整数划分---背包动态规划方式,计数类动态规划

目录

题目

DP分析

第一种方法,背包DP

 代码

第二种方法(有点难想到)

 代码


题目

一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1。

我们将这样的一种表示称为正整数 n 的一种划分。

现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示总划分数量。

由于答案可能很大,输出结果请对 10^9+7 取模。

数据范围

1≤n≤1000

输入样例:

5

输出样例:

7

DP分析

第一种方法,背包DP

        我们可以将 n 划分为  n_1,n_2,n_3\ ...\ n_k 可以理解为 由 n_1,n_2,n_3\ ...\ n_k 这些物品组合成 n,并且物品的数目不限。因此可以转化为完全背包问题。

状态表示:使用 f[i,j]

  • 集合:f[i,j] 表示从 [1,i] 种数字中选择,总和是 j 的方案。
  • 属性:方案的总和

状态计算:

  • 数字 i 选择 0 个,说明从前 i-1 中选,且加起来恰好是 j :f[i][j]=f[i-1][j]
  • 数字 i 选择 1 个,说明从前 i-1 中选,且加起来恰好是 j-i :f[i][j]=f[i-1][j-i]
  • 数字 i 选择 2 个,说明从前 i-1 中选,且加起来恰好是 j-2i :f[i][j]=f[i-1][j-2i]
  • ...
  • 数字 i 选择 k 个,说明从前 i-1 中选,且加起来恰好是 j-ki :f[i][j]=f[i-1][j-ki] 

     那么, f[i][j]=f[i-1][j]+f[i-1][j-i]+...+f[i-1][j-ki]

优化

       f[i][j]=f[i-1][j]+f[i-1][j-i]+...+f[i-1][j-ki]                ①

f[i][j-i]=f[i-1][j-i]+f[i-1][j-2i]...+f[i-1][j-ki]            ②

由①和②可得 f[i][j] = f[i-1][j]+f[i][j-i]

 代码

(从最后状态转移方差可以看出,方程与 i 无关,因此可以优化成一维)

import java.io.*;
import java.util.*;

class Main{
    static int N = 1010;
    static int[] f = new int[N];
    public static void main(String[] args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        f[0] = 1; // 初始化为1是因为,在后续 j 的更新中,本身j+0也是一种方案,每次从这+1
        
        // DP
        for(int i=1;i<=n;i++){
            for(int j=i;j<=n;j++){
                f[j] = (f[j]+f[j-i])%(1000000007); 
            }
        }

        System.out.println(f[n]);
    }
}

 

第二种方法(有点难想到)

状态表示:使用 f[i,j]

  • 集合:f[i,j] 表示 i 划分为 j 个数字的所有方案。
  • 属性:方案的总和。

状态计算:

  • 划分的所有数最小值为1 :f[i,j]=f[i-1,j-1]
  • 划分中所有数全都大于1 :f[i,j]=f[i-j,j] (将所有划分的数字都-1,由于全都大于1,因此-1也是大于0的,所以将i减去j个1,数字的个数仍然不变)

因此:f[i,j]=f[i-1,j-1]+f[i-j,j]

那么i可以划分的总和为从 [1,i]的总和: f[i,1]+f[i,2]+...\ +f[i,i]

 

 代码

import java.io.*;
import java.util.*;

class Main{
    static int N = 1010;
    static int[][] f = new int[N][N];
    public static void main(String[] args) throws IOException{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        f[0][0] = 1; // 初始化为1是因为,在后续 i 的更新中,本身i+0也是一种方案,每次从这+1
        
        // DP
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                f[i][j] = (f[i-1][j-1]+f[i-j][j])%(1000000007); 
            }
        }
        int res = 0;
        for(int i=1;i<=n;i++) res = (res+f[n][i])%(1000000007);
        System.out.println(res);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

maven项目引入私有jar,并打包到java.jar中

私有jar存放位置 maven依赖 <dependency><groupId>com.hikvision.ga</groupId><artifactId>artemis-http-client</artifactId><version>1.1.10</version><scope>system</scope><systemPath>${project.basedir}/s…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收OSD多路视频融合叠加应用本方案的SDI接收HLS多路视频融合叠加应用本方案…

基于YOLOv8深度学习的葡萄病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:LoadingProgress)

用于显示加载动效的组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 LoadingProgress() 创建加载进展组件。 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使…

Angular基础---HelloWorld---Day2

文章目录 1.循环语句&#xff1a; *ngfor2.循环语句&#xff1a;ngSwitch4.事件的绑定:click5.事件的绑定:input6.模版引用变量7.数据双向绑定ngModel8.动态表单控件9.动态表单空间组 文末附有代码仓库地址&#xff01;&#xff01;&#xff01; 1.循环语句&#xff1a; *ngfor…

大语言模型在科技研发与创新中的角色在快速变化

在技术研发与创新中&#xff0c;比如在软件开发、编程工具、科技论文撰写等方面&#xff0c;大语言模型可以辅助工程师和技术专家进行快速的知识检索、代码生成、技术文档编写等工作。在当今的软件工程和研发领域&#xff0c;尤其是随着大语言模型技术的快速发展&#xff0c;它…

保姆级讲解字符串函数(上篇)

目录 字符分类函数 导图 函数介绍 1.getchar 2. isupper 和 islower 字符转换函数&#xff1a;&#xff08;toupper , tolower&#xff09; 与 putchar 字符串函数 导图 string函数的使用和模拟实现 string的使用 求字符串长度 字符串的比较 string函数的模拟实现…

300分钟吃透分布式缓存-23讲:Redis是如何淘汰key的?

淘汰原理 首先我们来学习 Redis 的淘汰原理。 系统线上运行中&#xff0c;内存总是昂贵且有限的&#xff0c;在数据总量远大于 Redis 可用的内存总量时&#xff0c;为了最大限度的提升访问性能&#xff0c;Redis 中只能存放最新最热的有效数据。 当 key 过期后&#xff0c;或…

一个足球粉丝该怎么建个个人博客?

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…

oracle 获取两个时间相差天数,以及指定一个日期相差天数后的日期

1、获取两个时间相差天数 -- 两个日期相差天数 select (trunc(TO_DATE( 2024-02-28, YYYY-MM-DD ) -TO_DATE( 2024-02-25, YYYY-MM-DD ) )1) from dual2、获取日期减去指定天数后的时间 -- 两个日期相差天数的日期 select (TRUNC(TO_DATE( 2024-02-25, YYYY-MM-DD )- (trunc…

java-ssm-jsp-基于ssm的宠物领养系统的设计与实现

java-ssm-jsp-基于ssm的宠物领养系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

jupyter notebook 调整深色背景与单元格宽度与自动换行

# 安装jupyter主题 pip install jupyterthemes # 列举主题 jt -l # 设置主题 jt -t chesterish设置宽度 打开users 当前用户目录下的custom.css文件 写入.container { width:80% !important; } 即可 设置自动换行 查找创建这个目录以及文件notebook.json 写入配置 “li…

PHAMB: 病毒数据分箱

Genome binning of viral entities from bulk metagenomics data | Nature Communications 安装 ### New dependencies *Recommended* conda install -c conda-forge mamba mamba create -n phamb python3.9 conda activate phamb mamba install -c conda-forge -c biocond…

Python基础!入门必备知识及基本语句,初学者必过的一道门槛!

Python入门必备知识 1 标识符 标识符是编程时使用的名字&#xff0c;用于给变量、函数、语句块等命名&#xff0c;Python中标识符由字母、数字、下划线组成&#xff0c;不能以数字开头&#xff0c;区分大小写。 ①以下划线开头的标识符有特殊含义&#xff0c;单下划线开头的…

【vue.js】文档解读【day 4】 | 事件处理

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 文章目录 事件处理前言监听事件内联事件处理器方法事件处理器方法与内联事件判断在内联处理器中调用方法在内联事件处理器中访问事件参数修饰符事件修饰符按键修饰符常规按键别名系统按键别名组合按键ex…

java-ssm-jsp-基于ssm的宝文理学生社团管理系统

java-ssm-jsp-基于ssm的宝文理学生社团管理系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

【数据分享】2013-2022年全国范围逐月CO栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据和2013-2022年全国范围逐月SO2栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;。 本次我们给大家带来的是2013-2022年全国范围的逐月的CO栅格…

STL容器之哈希的补充——其他哈希问题

1.其他哈希问题 ​ 减少了空间的消耗&#xff1b; 1.1位图 ​ 位图判断在不在的时间复杂度是O(1)&#xff0c;速度特别快; ​ 使用哈希函数直接定址法&#xff0c;1对1映射&#xff1b; ​ 对于海量的数据判断在不在的问题&#xff0c;使用之前的一些结构已经无法满足&…

鸿蒙开发-UI-动画-页面内动画

鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 鸿蒙开发-UI-图形-图片 鸿蒙开发-UI-图形-绘制几何图形 鸿蒙开发-UI-图形-绘制自定义图形 文章目录 前言 一、概述 二、页面内…

基于springboot+vue的美食烹饪互动平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…