整数划分(计数类dp)-java

整数划分我们主要通过两种思路来对这道题就行解决。

文章目录

前言

一、整数划分

二、模拟完全背包

三.代码如下

1.代码如下

2.测试样例

3.代码运行结果

四、计数类dp

4.1算法思路

 4.2代码如下

总结


前言

整数划分我们主要通过两种思路来对这道题就行解决。


提示:以下是本篇文章正文内容,下面案例可供参考

一、整数划分

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

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

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

二、模拟完全背包

我们可以把1到n看成背包的容积,然后n1、n2.....nk看成物品,这个问题就转化成不限物品的次数,且恰好能装满背包容量的问题

我们引入二维数组dp,dp[i][j]表示的含义是用前i个数构成整数j所需要的方案数。

图1.1思路模拟 

第i个数不用时:

dp[i][j] = dp[i-1][j] 

当我们用第i个数时:

dp[i][j] = dp[i-1][j] + dp[i][j-i]

 

dp[i][j-i] = dp[i-1][j-1*i]+dp[i-1][j-2*i]+dp[j-3*i]...... 

这一步跟完全背包类似,不同的是我们需要求所有的方案之和。

当然我们还需要考虑一些边界情况比如当j为0的时候,我们本身就有一种由0构成的方案

dp[i][0] = 1

n\geqslant i\geqslant 0  

三.代码如下

1.代码如下

package AcWing;import java.io.*;
import java.util.*;public class 整数划分 {static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static int M =(int) 1e9+7;public static void main(String[] args) {Scanner sc = new Scanner(br);int n = sc.nextInt();int[][] dp = new int[1010][1010];for(int i = 0;i <= n;i++){//相当于总和为0,那么我们可以由0构成,也是一种方案dp[i][0] = 1;}//相当于哪个物品for(int i = 1;i <= n;i++){for(int j = 1; j <= n;j++){dp[i][j] = dp[i-1][j] % M;if(j >= i){dp[i][j] = (dp[i][j-i]+dp[i-1][j])%M;}}}pw.println(dp[n][n]);pw.flush();}
}

2.测试样例

5

3.代码运行结果

7

四、计数类dp

4.1算法思路

我们引入二维数组dp,dp[i][j]表示 所有总和为i,恰好为j个数相加的方案数。那么我们就可以枚举

图4.1模拟思路 

 dp[i][j]的值就可以分成两种情况:

(1)当被拆分的整数里面的最小值是1是,那我们就可以让取dp[i-1][j-1]的值,即我们减去一个已知的最小值1,剩下总和为i-1,恰好由j-1个数构成的方案数。

(2)当被拆分的整数里面的最小值大于i时,那么我们先减去j个1,那么总和为i-j的由j个数构成的方案里面的最小值就一定是大于1的,即dp[i-j][j]

dp[i][j] = dp[i-1][j-1]+dp[i-j][j]

那么我们最后输入的结果为:

result = dp[n][1] + dp[n][2].....+dp[n][n]

 4.2代码如下


import java.io.*;
import java.util.*;public class Main {static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));static int mod = (int)1e9+7;public static void main(String[] args) {Scanner sc = new Scanner(br);int n = sc.nextInt();int[][] dp = new int[1010][1010];dp[0][0] = 1;for(int i = 1; i<= n;i++){//总和为i,那么最多就有i个数相加for(int j = 1;j <= i;j++){dp[i][j] = (dp[i-1][j-1] + dp[i-j][j])%mod;}}int res = 0;for(int i = 1; i<= n;i++){//这里注意也要对mod取余,防止结果爆intres =(res + dp[n][i]) % mod;}pw.println(res);pw.flush();}}

总结

还是主要对状态转移方程的递推和对dp数组的理解。

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

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

相关文章

15. 【Android教程】按钮 Button/ImageButton

在前面两章我们讲了 TextView&#xff0c;它是一个纯输出的控件&#xff1b;而 EditText 在 TextView 基础之上加入了简单的输入功能&#xff1b;今天要讲的 Button 是一个和用户互动感很强的控件&#xff0c;从今往后不再是单纯的文本展示&#xff0c;我们可以通过 TextView、…

智能汽车领域检测实验室数智化转型

随着汽车制造行业自主研发能力的提高&#xff0c;当前的汽车企业实验室不仅需要进行种类繁多的试验项目&#xff0c;同时还需要将试验过程中的试验结果、试验过程、报告文档等一系列重要数据进行统一管理。为了提升实验数据的安全性及应用性&#xff0c;青软青之通过软硬件结合…

Unity类银河恶魔城学习记录12-7-2 p129 Craft UI - part 2源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_CraftWindow.cs using UnityEngine.UI; using TMPro; using UnityEngin…

重看Spring聚焦ApplicationContext分析

一、理解下ApplicationContext的设计 &#xff08;一&#xff09;功能性的理解 ApplicationContext 提供了一个轻量级、灵活、可扩展的容器&#xff0c;能帮助我们更加轻松地构建和管理复杂的应用程序&#xff0c;其通过依赖注入和控制反转等技术&#xff0c;降低了组件之间的…

【算法】统计英文字母出现的频率

题目 字母出现频率是指26英文个字母在文章中出现的频率。根据统计&#xff0c;在英语中最常出现的字母是e&#xff0c;大约占12~13%&#xff0c;出现最少的字母是z&#xff0c;不到0.1% &#xff0c;如下图所示&#xff08;统计结果来自wiki百科&#xff09; 字母出现频率的统…

三方库移植之NAPI开发(三)通过IDE开发NAPI工程

在三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI一文中&#xff0c;笔者开发的是一个rom包的napi工程。该工程需要编译烧录固件&#xff0c;C 的动态库会集成到开发板的ROM中。在本篇文章中&#xff0c;笔者使用三方库移植之NAPI开发[1]—Hello OpenHarmony NAPI中一样的he…

VXWorks6.9 + Workbench3.3 开发环境部署

VxWorks系列传送门 一、安装包 有需要的朋友可以私信~ 二、安装 安装挺简单 1、先安装DVD-R147826.1-1-01-vx69.udf.iso 镜像中的Setup.exe程序&#xff0c;记住要使用管理员权限 2、再安装DVD-R147826.1-23-00.iso 镜像中的Setup.exe程序&#xff0c;同样要使用管理员权限 3…

基于大数据的汽车信息可视化分析预测与推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目通过集成网络爬虫技术&#xff0c;实时获取海量汽车数据&#xff1b;运用先进的ARIMA时序建模算法对数据进行深度挖掘和分析&#xff1b;结合flask web系统和echarts可视化工具&#xff0c;…

CF698B Fix a Tree 题解 贪心

Fix a Tree 传送门 A tree is an undirected connected graph without cycles. Let’s consider a rooted undirected tree with n n n vertices, numbered 1 1 1 through n n n . There are many ways to represent such a tree. One way is to create an array with n…

基于GitHub的开源讨论系统,赋予网站交互可能

Giscus&#xff1a;让每一条见解直达GitHub&#xff0c;用Giscus开启网站与社区的无缝对话新纪元&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 纯静态网站或博客&#xff0c;由于没有数据存储功能&#xff0c;经常借助第三方的评论系统以插件的方式集成进来&#x…

uniapp 编译后分包下静态图片404问题解决方案

如上图官方说明&#xff1a; 在分包下建立一个static文件夹即可&#xff1a; 分包内代码引用图片 <image src"/分包名称/img/图片名称"></image> <image src"/dataView/img/图片名称"></image>

SQL执行流程图文分析:从连接到执行的全貌

SQL执行总流程 下面就是 MySQL 执行一条 SQL 查询语句的流程&#xff0c;也从图中可以看到 MySQL 内部架构里的各个功能模块。 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层&#xff0c; Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在…

Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序(0)

问题 解决方法 一 找到Navicat的安装路径&#xff0c;然后找到sqlncli_x64.msi文件并安装&#xff0c;安装成功后重启Navicat重新进行连接&#xff0c;看是否成功。 解决方法 二 如果方法一没有找到找到sqlncli_x64.msi 还是Navicat的安装路径&#xff0c;然后找到msodbcsql_64…

03-JAVA设计模式-适配器模式

适配器模式 设么是适配器模式 它属于结构型模式&#xff0c;主要用于将一个类的接口转换成客户端所期望的另一种接口&#xff0c;从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中&#xff0c;经常会有这…

第三十八节 Java 多线程编程

Java 给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程&#xff0c;并且每个线程定义了一个独立的执行路径。 多线程是多任务的一种特别的形式。多线程比多任务需要更小的开销。 这里定义和线程相关的另一个术语&…

【错误分享】打开Qt编译生成的软件,“无法找到入口”

错误简介 这张图片显示的是一个计算机错误提示窗口&#xff0c;标题为“无法找到入口”。正文内容是&#xff1a;“无法定位程序输入点_Z21qRegisterResourceDataaiPKhS0_S0_于动态链接库Qt5Core.dll上。” 这意味着在尝试运行程序时遇到了问题。 具体来说&#xff0c;该错误表…

Vue内置组件Transition用法介绍

Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。本章节会介绍如何使用它。 <TransitionGroup> 会在一个 v-for 列表中的元素或组件被插入&#xff0c;移动&a…

从大量数据到大数据,King’s SDMS仪器数据采集及科学数据管理系统的应用

对于实验室或检测机构&#xff0c;仪器设备是所有业务开展的基础&#xff0c;数据则是核心命脉&#xff0c;而传统的仪器设备原始数据收集方式&#xff0c;效率低耗时长、操作流程不规范、不易保存与查找、错误率高、易篡改等成了制约检测机构持续高速发展的瓶颈和弊端&#xf…

单例19c RMAN数据迁移方案

一、环境说明 源库 目标库 IP 192.168.37.200 192.168.37.202 系统版本 RedHat 7.9 RedHat 7.9 数据库版本 19.3.0.0.0 19.3.0.0.0 SID beg beg hostname beg rman 数据量 1353M 说明:源库已经创建数据库实例&#xff0c;并且存在用户kk和他创建的表空间…

新规来了!智能音视频技术重塑信贷体验

近日&#xff0c;国家金融监督管理总局发布《固定资产贷款管理办法》《流动资金贷款管理办法》《个人贷款管理办法》&#xff08;以下简称“三个办法”&#xff09;。 具体来看&#xff0c;新规明确了以下要求&#xff1a; 1、明确视频面签、电子签约要求 允许商业银行通过视…