题意:转化后为给定一个数L,问L拆成N个不同的数相加的方案数,其中N>=2。

解法:其实和上次做的分解的2的幂的数量相同,由于要求每个数都不相同,这里有一个非常好的观察角度,那就是观察一个数的分解中是否存在1,再加上考虑其能够被分解的数的个数即可建立递推关系。

设f[i][j]表示数 i 被分成 j 个不同的数相加的方案数,那么考虑最后分解中不含有1,那么这部分由f[i-j][j]得到,因为后者的每一个分解出来的数都加上1就行了;接着考虑分解中含有1,那么可以假定这个1就是最后分出来的,因为分解的顺序并不影响最后的结果,由于分解中数均不相同,扣除1后,就变成了f[i-1][j-1]中不含有1的情况了,而这个结果就又可以转化为:f[i-1-(j-1)][j-1]了。整个过程非常的巧妙。一个数最多分解成多少个数相加呢?这里可以假设L被连续的1+2+...+N组成,能够推算出一个上界出来。即求一个最大的x满足x*(x+1)/2 <= L。

直接开设状态会导致TLE,由于之多只和前300来层有关系,因此来个350的第一维来滚动吧。看到另外一种压缩方法是把第二维变成01,看来两者结合起来可以使得使用内存更加小。

代码如下:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;int f[350][350]; // 50000的长度也最多拆成满足等式 x*(x+1)/2<=50000 的最大的x段
// 这题和上次的一道拆分成2的幂的题目非常的像了,从一个拆分中是否有1这个元素进行递推
int ans[50005];
const int MOD = 1000000;int get(int x) {int k = (int)sqrt(2.0*x);while ((k+1)*(k+2)/2 <= x) k++;while (k*(k+1)/2 > x) k--;// 准确的计算出最多由多少个元素组成return k;
}void pre() {for (int cur = 0, i = 3; i <= 50000; ++i, cur = (cur+1) % 350) {int k = get(i);f[cur][2] = (i - 1) >> 1;ans[i] = f[cur][2];for (int j = 3; j <= k; ++j) { // 至少由两部分组成int nxt = (cur - j + 350) % 350;f[cur][j] = (f[nxt][j] + f[nxt][j-1]) % MOD;// 这个式子的含义是从不含1和含1两个状态合并并等价而来 ans[i] = (ans[i] + f[cur][j]) % MOD;}}
}int main() {int T, N;pre();scanf("%d", &T);while (T--) {scanf("%d", &N);printf("%d\n", ans[N]);}return 0;
}

附(未取模):

i = 2, ret = 0
i = 3, ret = 1
i = 4, ret = 1
i = 5, ret = 2
i = 6, ret = 3
i = 7, ret = 4
i = 8, ret = 5
i = 9, ret = 7
i = 10, ret = 9
i = 11, ret = 11
i = 12, ret = 14
i = 13, ret = 17
i = 14, ret = 21
i = 15, ret = 26
i = 16, ret = 31
i = 17, ret = 37
i = 18, ret = 45
i = 19, ret = 53
i = 20, ret = 63
i = 21, ret = 75
i = 22, ret = 88
i = 23, ret = 103
i = 24, ret = 121
i = 25, ret = 141
i = 26, ret = 164
i = 27, ret = 191
i = 28, ret = 221
i = 29, ret = 255
i = 30, ret = 295
i = 31, ret = 339
i = 32, ret = 389
i = 33, ret = 447
i = 34, ret = 511
i = 35, ret = 584
i = 36, ret = 667
i = 37, ret = 759
i = 38, ret = 863
i = 39, ret = 981
i = 40, ret = 1112
i = 41, ret = 1259
i = 42, ret = 1425
i = 43, ret = 1609
i = 44, ret = 1815
i = 45, ret = 2047
i = 46, ret = 2303
i = 47, ret = 2589
i = 48, ret = 2909
i = 49, ret = 3263
i = 50, ret = 3657
i = 51, ret = 4096
i = 52, ret = 4581
i = 53, ret = 5119
i = 54, ret = 5717
i = 55, ret = 6377
i = 56, ret = 7107
i = 57, ret = 7916
i = 58, ret = 8807
i = 59, ret = 9791
i = 60, ret = 10879
i = 61, ret = 12075
i = 62, ret = 13393
i = 63, ret = 14847
i = 64, ret = 16443
i = 65, ret = 18199
i = 66, ret = 20131
i = 67, ret = 22249
i = 68, ret = 24575
i = 69, ret = 27129
i = 70, ret = 29926
i = 71, ret = 32991
i = 72, ret = 36351
i = 73, ret = 40025
i = 74, ret = 44045
i = 75, ret = 48445
i = 76, ret = 53249
i = 77, ret = 58498
i = 78, ret = 64233
i = 79, ret = 70487
i = 80, ret = 77311
i = 81, ret = 84755
i = 82, ret = 92863
i = 83, ret = 101697
i = 84, ret = 111321
i = 85, ret = 121791
i = 86, ret = 133183
i = 87, ret = 145577
i = 88, ret = 159045
i = 89, ret = 173681
i = 90, ret = 189585
i = 91, ret = 206847
i = 92, ret = 225584
i = 93, ret = 245919
i = 94, ret = 267967
i = 95, ret = 291873
i = 96, ret = 317787
i = 97, ret = 345855
i = 98, ret = 376255
i = 99, ret = 409173
i = 100, ret = 444792
i = 101, ret = 483329
i = 102, ret = 525015
i = 103, ret = 570077
i = 104, ret = 618783
i = 105, ret = 671417
i = 106, ret = 728259
i = 107, ret = 789639
i = 108, ret = 855905
i = 109, ret = 927405
i = 110, ret = 1004543
i = 111, ret = 1087743
i = 112, ret = 1177437
i = 113, ret = 1274117
i = 114, ret = 1378303
i = 115, ret = 1490527
i = 116, ret = 1611387
i = 117, ret = 1741520
i = 118, ret = 1881577
i = 119, ret = 2032289
i = 120, ret = 2194431
i = 121, ret = 2368799
i = 122, ret = 2556283
i = 123, ret = 2757825
i = 124, ret = 2974399
i = 125, ret = 3207085
i = 126, ret = 3457026
i = 127, ret = 3725409
i = 128, ret = 4013543
i = 129, ret = 4322815
i = 130, ret = 4654669
i = 131, ret = 5010687
i = 132, ret = 5392549
i = 133, ret = 5802007
i = 134, ret = 6240973
i = 135, ret = 6711479
i = 136, ret = 7215643
i = 137, ret = 7755775
i = 138, ret = 8334325
i = 139, ret = 8953855
i = 140, ret = 9617149
i = 141, ret = 10327155

转载于:https://www.cnblogs.com/Lyush/archive/2013/05/31/3110902.html

HDU-4477 Cut the rope II 递推相关推荐

  1. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

  2. HDU 6092 Rikka with Subset 思维 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6092 题目描述: 给你一个集合的所有子集各个和, 让你找到这个集合, 输出字典序最小 解题思路: 下 ...

  3. hdu 2604 Queuing AC自动机构造递推式-矩阵-结果

    http://acm.hdu.edu.cn/showproblem.php?pid=2604 题意: L个人排队,这一队里男性用m表示,女性用f表示,问长度为L的序列里面不包含形如"fmf& ...

  4. hdu 2064汉诺塔III 递推

    汉诺塔递推题,比汉诺塔多了一个限制条件,盘子只允许在相邻的柱子之间移动. 分析: 第1步:初始状态: 第2步:把上面的n-1个盘移到第3号杆上: 第3步:把第n个盘从1移到2: 第4步:把前n-1个从 ...

  5. HDU 5119 Happy Matt Friends(递推)

    http://acm.hdu.edu.cn/showproblem.php?pid=5119 题意: 给出n个数和一个上限m,求从这n个数里取任意个数做异或运算,最后的结果不小于m有多少种取法. 思路 ...

  6. HDU 2502 月之数(简单递推)

    月之数 Problem Description 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数. 如果一个正整数m表示成二进制,它的位数 ...

  7. HDU - 6267 (概论/找规律/递推)

    VJ地址 题目大意: 有n个节点 从0-(n-1),连边的规律为 即i点的父亲只能是比i小的数,而且是随机的,现在随机选择应该一个节点作为根,求这子树的和的期望是多少. 思路:可以知道总共有(n-1) ...

  8. HDU - 2044一只小蜜蜂 一道递推题

    一只小蜜蜂 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> ...

  9. HDU 2046 骨牌铺方格【递推】

    骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

最新文章

  1. 原码, 反码, 补码, 移码 详解
  2. 无责任书评:每个Java程序员都应该深入理解Java虚拟机!
  3. Rational rose的安装
  4. matlab第三方控件,第三方控件介绍
  5. endnote x9中科大版_文献管理软件Endnote的一些使用经验
  6. 从零开始发布自己的NPM包
  7. 贡献十本经典的java教程,都是pdf完整版
  8. 手绘线条一直画不直_板绘线条不流畅怎么办?线稿就得这样练!
  9. 劳务派遣人员管理办法范文
  10. 先一XDB实时数据库采集
  11. android FTP上传下载文件
  12. 计算机组装的硬件配置及报价,2021组装电脑配置清单及价格表说明
  13. 红米Note4X开发者选项
  14. 少儿机器人编程课程学什么
  15. Linux学习推荐书籍
  16. Uncaught TypeError: Cannot read property 'decimalSeparator' of undefined
  17. 乐视超级电视刷鸿蒙,乐视超3X55刷精简+root系统记录
  18. 电子商务B2C网站运营策略路线图
  19. 计算机网络主机访问网址(建立HTTP)过程
  20. Unity material修改图片的UV通道

热门文章

  1. 框架设计之菜鸟漫漫江湖路系列 三:初入江湖
  2. 易經大意(8) 三和 韓長庚 著
  3. PDF怎么转长图?这些方法不妨了解一下
  4. channel通道的一些细节
  5. vue当中的$refs[formName].validate详解
  6. word插入图表目录的时候同时插入了原图的解决办法
  7. 极简文艺的浏览器主页推荐,无广告,文艺又清新的网址导航
  8. ebcdic编码与ascII编码互转
  9. 中国科学院大学计算机考研好考吗,中国科学院大学考研难吗?一般要什么水平才可以进入?...
  10. 计算机维护记录软件,Take-1 Recorder(电脑操作记录软件)