C++ 动态规划 计数类DP 整数划分

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

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

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

输入格式
共一行,包含一个整数 n

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

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

数据范围
1≤n≤1000
输入样例:
5
输出样例:
7

思考问题没有思路的时候,考虑先找一个简单的数列一下,演算一下。
在这里插入图片描述
(1)背包做法
容量为n的背包,物品n个1-n,每个物品可以用无限次,也就是完全背包问题。
集合表示为:从1 - i个物品中选出体积恰好是j的方案数
在这里插入图片描述
在这里插入图片描述
替换一下:
在这里插入图片描述
优化掉一维,体积从大到小循环。
在这里插入图片描述

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

(2)另一种状态转移方程的做法

// #include <iostream>
// #include <algorithm>// const int MOD = 1e9 + 7, N = 1010;// int n;
// int f[N];// int main ()
// {
//     scanf("%d", &n);
//     f[0] = 1;//     for(int i = 1; i <= n; i ++ )
//         for(int j = i; j <= n; j ++ )
//             f[j] = (f[j] + f[j - i]) % MOD;//     printf("%d\n", f[n]);//     return 0;
// }#include <iostream>
#include <algorithm>const int MOD = 1e9 + 7, N = 1010;int n;
int f[N][N];int main ()
{scanf("%d", &n);f[0][0] = 1;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]) % MOD;int res = 0;for(int i = 1; i <= n; i ++ ) res = (res + f[n][i]) % MOD;printf("%d\n", res);return 0;
}

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

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

相关文章

Linux入门(1)Linux介绍

目录 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 2. 学会如何使用云服务器 3. 掌握使用远程终端工具 xshell 登陆 Linux 服务器 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 学习Linux系统编程&#xff0c;你可能要问Linux从哪里来&#xff1f;它是怎么发展的&am…

小游戏和GUI编程(7) | SimpleNN 界面源码解析

小游戏和GUI编程(7) | SimpleNN 界面源码解析 0. 简介 SimpleNN 是 AdamYuan 在高中一年级时用 1 天时间写出来的简易 CNN, 使用 SFML 做 UI, 用于交互式输入手写数字&#xff0c;这个数字被训练好的 CNN 网络执行推理得到识别结果, 它的运行效果如下&#xff1a; 这一篇我们…

【项目】高并发内存池

高并发内存池 【项目】高并发内存池项目介绍这个项目做的是什么&#xff1f; 内存池相关知识池化技术内存池malloc 定长内存池的实现高并发内存池整体框架设计ThreadCache对齐规则封装FreeList类封装thread cache类TLS无锁访问 CenctralCache整体设计页号规定span结构SpanList结…

2.8:Maefile、计算单词个数、判断文件类型、单词逆置

1.有main.c&#xff0c;test.c&#xff0c;test1.c&#xff0c;创建Makefile 程序代码&#xff1a; Makefile: 1 CCgcc2 EXEhello3 OBJS$(patsubst %.c,%.o,$(wildcard *.c))4 CFLAGS-c -o5 all:$(EXE)6 7 #hello依赖test.o main.o8 $(EXE):$(OBJS)9 $(CC) $^ -o $10 …

浅析Linux追踪技术之ftrace:Tracepoint

文章目录 概述Tracepoint使用定义Tracepoint添加Tracepoint调用 Tracepoint数据结构TRACE_EVENT实现DECLARE_TRACE__DECLARE_TRACE trace_xxx函数相关参考 概述 Tracepoint&#xff08;跟踪点&#xff09;是添加到代码流程中的调用点&#xff0c;并且允许开发者注册自定义的回…

TCP高频知识点

本篇文章主要讲述一下在面试过程中TCP的高频知识点 1.TCP三次握手流程图: 客户端发送一个SYN&#xff08;同步&#xff09;报文段给服务器&#xff0c;选择一个初始序列号&#xff0c;并设置SYN标志位为1。服务器接收到客户端的SYN报文段后&#xff0c;回复一个ACK&#xff08…

webgis后端安卓系统部署攻略,超详细Termux攻略

目录 前言 一、将后端项目编译ARM64 二、安卓手机安装termux 1.更换为国内源 2.安装ssh远程访问 3.安装文件远程访问 三、安装postgis数据库 1.安装数据库 2.数据库配置 3.数据导入 四、后端项目部署 五、自启动设置 总结 前言 因为之前一直做的H5APP开发&#xf…

如何利用SpringSecurity进行认证与授权

一、SpringSecurity简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#x…

【排序】归并排序

归并排序 动图演示&#xff1a; 基本思想&#xff1a;分治思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子…

深入理解C语言(4):文件操作详解

文章主题&#xff1a;文件操作详解&#x1f30f;所属专栏&#xff1a;深入理解C语言&#x1f4d4;作者简介&#xff1a;更新有关深入理解C语言知识的博主一枚&#xff0c;记录分享自己对C语言的深入解读。&#x1f606;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&#x…

Linux中alarm/setitimer函数(信号函数)

alarm函数 函数原型&#xff1a; unsigned int alarm(unsigned int seconds); 函数描述&#xff1a;设置定时器&#xff08;闹钟&#xff09;。在指定seconds后&#xff0c;内核会给当前进程发送 14&#xff09;SIGALRM信号。进程收到该信号&#xff0c;默认动作终止。每个进程…

JAVA-多进程开发-创建等待进程

前言 在项目中&#xff0c;为了实现“并发编程”&#xff08;同时执行多个任务&#xff09;&#xff0c;就引入了“多进程编程”&#xff0c;把一个很大的任务&#xff0c;拆分成若干个很小的任务&#xff0c;创建多个进程&#xff0c;每个进程分别负责其中的一部分任务。 这也…