整数划分(计数类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,一经查实,立即删除!

相关文章

【数据库(MySQL)基础】以MySQL为例的数据库基础

文章目录 0. 本文用到的emp表,dept表,salgrade表1. MySQL入门2. 简单查询3. 字段计算4. 条件查询4.1 and4.2 null4.3 or4.4 and和or的优先级4.4 in 和 not in4.5 模糊查询 5. 排序5.1 简单排序5.2 两个字段排序5.3 综合排序 6. 一些常用函数6.1 大小写转换6.2 substr子字符串6.…

数据库系统工程师考试大纲

数据库系统工程师考试大纲主要包括以下几个方面的考试要求&#xff1a; 1.掌握计算机体系结构以及各主要部件的性能和基本工作原理。 2.掌握操作系统、程序设计语言的基础知识&#xff0c;了解编译程序的基本概念。 3.熟练掌握常用数据结构和常用算法。 4.熟悉软件工程和软件开…

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

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

蒙德冒险者的游戏

描述 蒙德城的一群冒险者计划进行一场特殊的表演以庆祝风神节。这场表演涉及到一项特别的挑战&#xff0c;即“冒险者塔”——一项测试冒险者们团队协作和个人承受能力的活动。 在“冒险者塔”表演中&#xff0c;参与者需要站在彼此的肩膀上&#xff0c;形成一个人类塔&#…

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

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

快速下载huggingface资源 (cli使用)

因为墙的原因&#xff0c;huggingface上的资源难以下载&#xff0c;通过本博客的方法不需翻墙也能快速下载。 本博客主要介绍&#xff1a; 1. 如何离线下载huggingface 资源 2. huggingface cli 的简单使用 安装 pip install -U "huggingface_hub[cli]" 配置 #…

for in 和 for of 的区别

1.for in 和 for of 都可以循环数组&#xff0c;for in 输出的是数组的 index 下标&#xff0c;而 for of 输出的是数组的每一项的值。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport…

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…

动态规划在电商订单计算的例子

你在网上买了一堆商品,比如说,你买了2件T恤,每件10块,5件袜子,每双5块,还有1个帽子,8块钱。但是呢,商家有个促销活动,买得越多,单价就越便宜。比如,T恤买3件以上,每件就变成9块了。这时候,怎么算出你这一单的最少花费呢? 商品价格可能会因为购买数量的不同而有所…

重看Spring聚焦ApplicationContext分析

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

SpringBoot 多数据源与事务管理:一站式解决方案

大纲 引言 在当今的软件开发中&#xff0c;随着业务的不断扩展和复杂化&#xff0c;许多应用程序都不再局限于单一的数据库&#xff0c;而是需要同时操作多个数据源以满足各种需求。SpringBoot作为一种快速开发框架&#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>

图书整理 I 1、返回列表 2、头插法,返回链表 3、尾插法,返回链表

返回列表 class Solution:def reverseBookList(self, head: Optional[ListNode]) -> List[int]:li []while head:li.append(head.val)head head.nextreturn li[::-1]头插法&#xff0c;返回链表 class ListNode:def __init__(self, item):self.val itemself.next None…

Rust教程 – 学习天文图像的多尺度处理

最近&#xff0c;人们投入了大量精力开发新颖的图像处理技术。其中许多技术都源自于傅里叶和小波变换等数字信号处理方法。 这些技术不仅使得各种图像处理技术如降噪、锐化和动态范围扩展成为可能&#xff0c;而且还使得计算机视觉中使用的许多技术如边缘检测、目标检测等成为…