51Nod-1259-整数划分 V2

将N分为若干个整数的和,有多少种不同的划分方式,例如:n = 4,{4} {1,3} {2,2} {1,1,2} {1,1,1,1},共5种。由于数据较大,输出Mod 10^9 + 7的结果即可。

Input

输入1个数N(1 <= N <= 50000)。

Output

输出划分的数量Mod 10^9 + 7。

Input示例

4

Output示例

5

题解

分块DP

复杂度O(n*sqrt(n))

设m = sqrt(n)

我们可以先考虑使用1~m凑成数的方案, 完全背包即可

对于剩下的m+1 ~ n 我们发现每个数最多使用 m 次

然后

g[i][j] 表示使用了i个数(m+1~m+i)和为j的方案数

令m++

g[i][j] = g[i-1][j-m] + g[i][j-i]

这什么意思呢?

对于一个序列,我们有两种操作:

1.添加一个基数m

2.给每个数+1(注意这里的j是正着枚举的,所以可重复给每个数加一)

Code

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define RG register
  4. using namespace std;
  5. inline int gi() {
  6. int f = 1, s = 0;
  7. char c = getchar();
  8. while (c != '-' && (c < '0' || c > '9')) c = getchar();
  9. if (c == '-') f = -1, c = getchar();
  10. while (c >= '0' && c <= '9') s = s*10+c-'0', c = getchar();
  11. return f == 1 ? s : -s;
  12. }
  13. const int N = 50010, Mod = 1e9+7;
  14. int f[N], g[250][N], s[N];
  15. int main() {
  16. //freopen(".in", "r", stdin);
  17. //freopen(".out", "w", stdout);
  18. int n = gi(), m = sqrt(n)+1;
  19. f[0] = 1;
  20. for (int i = 1; i < m; i++)
  21. for (int j = i; j <= n; j++)
  22. (f[j] += f[j-i]) %= Mod;
  23. int ans = 0;
  24. g[0][0] = 1;
  25. s[0] = 1;
  26. for (int i = 1; i < m; i++) {
  27. for (int j = m; j <= n; j++) {
  28. g[i][j] = (g[i-1][j-m] + g[i][j-i]) % Mod;
  29. s[j] = (s[j] + g[i][j]) % Mod;
  30. }
  31. }
  32. for (int i = 0; i <= n; i++)
  33. ans = (ans + (LL)f[i]*s[n-i]%Mod) % Mod;
  34. printf("%lld\n", ans);
  35. return 0;
  36. }

51Nod-1259-整数划分 V2的更多相关文章

  1. 1259 整数划分 V2

    设dp[n]为整数n的分割函数,由五边形定理得到: dp[n] = dp[n-1] + dp[n-2] - dp[n-5] - dp[n-7]…… 我们将其分为两部分计算 第一部分为 :( dp[n- ...

  2. 【题解】整数划分 [51nod1201] 整数划分 V2 [51nod1259]

    [题解]整数划分 [51nod1201] 整数划分 V2 [51nod1259] 传送门:整数划分 \([51nod1201]\) 整数划分 \(V2\) \([51nod1259]\)** [题目描 ...

  3. 51nod p1201 整数划分

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2, ...

  4. 51nod 1201 整数划分 dp

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB   收藏  关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2 ...

  5. 51nod 1201 整数划分 基础DP

    1201 整数划分  基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} ...

  6. 51Nod 1201 整数划分 (经典dp)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 题意不多说了. dp[i][j]表示i这个数划分成j个数 ...

  7. 51nod 1201 整数划分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 DP转移方程:dp[i][j] = dp[i-j][j]+dp[i ...

  8. 51nod 1201:整数划分 超级好的DP题目

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} { ...

  9. 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)

    这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...

随机推荐

  1. XP下,移动窗口产生重影的问题

    最近做了一个东西,其中有一个小窗口需要跟着主窗口一起移动,结果发现在Xp系统上总是产生重影,需要刷新桌面才能消失. 移动窗口我使用的是MoveWindow,最后一个参数bRepaint传递的是FALS ...

  2. the install of mysql in Linux System

    一.下载MySql 浏览器打开 https://www.mysql.com/downloads/mysql/#downloads 下载 我下载的版本是Red Hat 5 版本的 https://www ...

  3. SQL 数据排重,去掉重复数据 有用

    .最大的错误:    在对数据排重的时候,首先想到的就是Distinct,虽然这很管用,但多数场合下不适用,因为通常排重后还要做进一步处理,比如对编号排重后要按日期统计等. 无法排重的Group by ...

  4. 面试题:TCP协议三次握手

    一.首先了解TCP报文格式 其中必须了解的字段有: 1.源端口与目的端口:16位,标识出发送端与接收端的端口号. 2.序号:32位,也叫顺序号.seg序号,本报文段所发送的数据的第一个字节的序号,用来 ...

  5. keepalived配置

    keepalived配置 之前已经安装完成,接下来我们配置keepalived. 假设我的ip地址如下: server1:192.168.0.150 server2:192.168.0.157 vip ...

  6. python解释器的下载和安装

    1.python解释器的下载 python这样的语言,需要一个解释器.而且解释器还有多种语言的实现,我们介绍的是最常用的C语言的实现,称之为Cpython.Python通过在各种操作系统上都有各自的解 ...

  7. ZendStudio 代码调试

    F5.单步调试进入函数内部(单步进入)F6.单步调试不进入函数内部(跳过)F7.由函数内部返回到调用处(跳出) F8.一直执行到下一个断点Ctrl+F2:结束调试

  8. SQL之DML

    DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects. 由D ...

  9. postfix 安装配置详解

    [ref: http://blog.51yip.com/server/1382.html] [http://blog.chinaunix.net/uid-174325-id-1744019.html] ...

  10. 手机打车APP的机遇与挑战

    所谓打车APP,就是个能安装在手机上的打车软件.原理是通过GPS进行定位,能够搜索附近的空车信息然后反馈给用户.同样的,空车信息也会反馈给用户.一般这种啊APP都是跟地图类软件一起的.比如百度地图,谷 ...