[C++][算法基础]整数划分(统计动态规划)

embedded/2024/11/15 0:40:22/

一个正整数 𝑛 可以表示成若干个正整数之和,形如:𝑛=𝑛1+𝑛2+…+𝑛𝑘,其中 𝑛1≥𝑛2≥…≥𝑛𝑘,𝑘≥1。

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

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

输入格式

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

输出格式

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

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

数据范围

1≤𝑛≤1000

输入样例:
5
输出样例:
7

 代码:

1. 二维数组做法(完全背包)

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 1010, mod = 1e9 + 7;
int n;
int f[N][N];int CountDP(){for(int i = 0;i <= n;i ++){f[i][0] = 1;}for(int i = 1;i <= n;i ++){for(int j = 1;j <= n;j ++){if(j >= i){f[i][j] = (f[i - 1][j] + f[i][j - i]) % mod;}else{f[i][j] = f[i - 1][j];}}}return f[n][n];
}int main(){cin>>n;int res = CountDP();cout<<res<<endl;return 0;
}

2. 一维数组做法(完全背包)

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 1010, mod = 1e9 + 7;
int n;
int f[N];int CountDP(){for(int i = 0;i <= n;i ++){f[0] = 1;}for(int i = 1;i <= n;i ++){for(int j = 1;j <= n;j ++){if(j >= i){f[j] = (f[j] + f[j - i]) % mod;}else{f[j] = f[j];}}}return f[n];
}

3. 优化做法(以最小值1为界划分)

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 1010, mod = 1e9 + 7;
int n;
int f[N][N];int CountDP(){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;}return res;
}int main(){cin>>n;int res = CountDP();cout<<res<<endl;return 0;
}


http://www.ppmy.cn/embedded/31446.html

相关文章

「 网络安全常用术语解读 」通用配置枚举CCE详解

1. 背景介绍 NIST提供了安全内容自动化协议&#xff08;Security Content Automation Protocol&#xff0c;SCAP&#xff09;为漏洞描述和评估提供一种通用语言。SCAP组件包括&#xff1a; 通用漏洞披露(Common Vulnerabilities and Exposures, CVE)&#xff1a;提供一个描述…

原型模式和建造者模式

1、原型模式 1.1 概念 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 1.2 结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。 具体原型类&#xff1a;实现抽…

QT, 查看局域网在线主机网卡的出厂商

如题 &#xff0c; 通过QProcess获取到的局域网mac地址&#xff0c;使用QNetworkReply &#xff08;记得要QT network&#xff09;可以获取其对应的生产产商&#xff08;将mac地址传入某专门查询mac地址厂商的网站&#xff0c;并分析其返回值&#xff0c;获得结果&#xff0c;…

信息泄露.

一&#xff0c;遍历目录 目录遍历&#xff1a;没有过滤目录相关的跳转符号&#xff08;例如&#xff1a;../&#xff09;&#xff0c;我们可以利用这个目录找到服务器中的每一个文件&#xff0c;也就是遍历。 tipe&#xff1a;依次点击文件就可以找到flag 二&#xff0c;phpi…

如何在Mac上恢复格式化硬盘的数据?

“嗨&#xff0c;我格式化了我的一个Mac硬盘&#xff0c;而没有使用Time Machine备份数据。这个硬盘被未知病毒感染了&#xff0c;所以我把它格式化为出厂设置。但是&#xff0c;我忘了备份我的文件。现在&#xff0c;我想恢复格式化的硬盘驱动器并恢复我的文档&#xff0c;您能…

GDPU JavaWeb 猜字母游戏

他在对你重定向打卡的大饼与立即跳转到你面前的谎言之间反复横跳。 sendRedirect与forward sendRedirect与forward区别 sendRedirect用于将请求重定向到另一个资源&#xff0c;可以是同一个应用程序内的其他 Servlet&#xff0c;也可以是其他 Web 应用程序的资源&#xff0c;…

Nginx部署静态网页,网页嵌套PSE搜索

静态网页实现 1.目的2.PSE设置3.Docker部署nginx4.静态网页仿写参考文件 1.目的 组内有些探索性小需求&#xff0c;发现与OncoSearch功能类似&#xff0c;便尝试自己复现一下该网页&#xff0c;也为后面其他工作打个基础。感谢作者的无私分享&#xff0c;才让我有机会复现出结果…

【经典算法】LeetCode 189. 轮转数组(Java/C/Python3/Go实现含注释说明,中等)

目录 题目描述思路及实现方式一&#xff1a;三次翻转思路代码实现Java版本C语言版本Python3版本Golang版本 复杂度分析 方式二&#xff1a;使用辅助数组思路代码实现Java版本C语言版本Python3版本Golang版本 复杂度分析 总结相似题目 标签&#xff08;题目类型&#xff09;&…