题意是求所给的数能够被拆分成的不同组合数目。

方法有三种:

一、完全背包。

限制条件:所用数字不大于 n。

目标:求分解种数(组合出 n 的方法数)。

令 dp[ i ][ j ] = x 表示 用前 i 种数字组合出数字 j 有 x 种方法。

状态转移方程:dp[ i ][ j ] = dp[ i -1 ][ j ] + dp[ i ][ j - num[i] ]

方程解释:前 i 种数字组合出数字 j 的方法数 = 前 i - 1 种数字组合出数字 j 的方法数(不用第 i 种数字)+ 至少用一次第 i 种数字的方法数。

用滚动数组求解,代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int dp[];
  4. void init()
  5. {
  6. dp[] = ;
  7. for(int i = ; i <= ; ++i)
  8. for(int j = i; j <= ; ++j)
  9. dp[j] += dp[j-i];
  10. }
  11. int main()
  12. {
  13. int n;
  14. init();
  15. while(~scanf("%d",&n))
  16. printf("%d\n",dp[n]);
  17. return ;
  18. }

二、分治。

令 sol(a, b) 表示 a 被最大数字为 b 的数字分解成的种数。则

当 a == 1 && b == 1 时,只能分解成 1 种;

当 a < 1 || b < 1 时,一种也没有,即只能分解成 0 种;

当 a == b 时,则 分解种数 = 含 b 的数字分解种数(仅 1 种) +  不含 b 的数字分解种数,即 sol(a, b) = 1 + sol(a, b - 1);

当 a < b 时,则 分解种数 = 最大数字为 a 的分解种数,即 sol(a, b) = sol(a, a);

当 a > b 时,则 分解种数 = 没有 b 的数字分解种数 + 至少含有 1 个 b 的数字分解种数,即 sol(a, b) = sol(a, b-1) + sol(a-b, b)。

打表求解,代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[]={,,,,,,,,,
  4. ,,,,,,,,,,,
  5. ,,,,,,,,,
  6. ,,,,,,,,
  7. ,,,,,,,
  8. ,,,,,,,
  9. ,,,,,,,
  10. ,,,,,,
  11. ,,,,,,
  12. ,,,,,,
  13. ,,,,,,
  14. ,,,,,,
  15. ,,,,,,
  16. ,,,,,
  17. ,,,,,
  18. ,,,,,
  19. ,,,,,
  20. ,,,,,
  21. ,};
  22. //数组的求解方法
  23. //int sol(int a,int b)
  24. //{
  25. // if(a==1||b==1) return 1;
  26. // else if(a<1||b<1) return 0;
  27. // else if(a==b) return sol(a,b-1)+1;
  28. // else if(a>b) return sol(a,b-1)+sol(a-b,b);
  29. // else if(a<b) return sol(a,a);
  30. //}
  31. int main()
  32. {
  33. int n;
  34. while(~scanf("%d",&n))
  35. printf("%d\n",a[n]);
  36. return ;
  37. }

三、母函数。

本题的做法与 HDU 1284 类似,要查看母函数的相关讲解请点这里

HDU 1028(数字拆分 分治)的更多相关文章

  1. hdu acm 1028 数字拆分Ignatius and the Princess III

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  2. Ignatius and the Princess III HDU - 1028 || 整数拆分,母函数

    Ignatius and the Princess III HDU - 1028 整数划分问题 假的dp(复杂度不对) #include<cstdio> #include<cstri ...

  3. HDU 1028 整数拆分 HDU 2082 找单词 母函数

    生成函数(母函数) 母函数又称生成函数.定义是给出序列:a0,a1,a2,...ak,...an, 那么函数G(x)=a0+a1*x+a2*x2+....+ak*xk +...+an* xn  称为序 ...

  4. hdu,1028,整数拆分的理解

    #include"iostream"using namespace std;int main() { int n,i,j,k; int c[122],temp[122]; //c[ ...

  5. HDU 1028 整数拆分问题 Ignatius and the Princess III

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  6. HDU 1028 Ignatius and the Princess III (生成函数/母函数)

    题目链接:HDU 1028 Problem Description "Well, it seems the first problem is too easy. I will let you ...

  7. ACM: HDU 1028 Ignatius and the Princess III-DP

     HDU 1028 Ignatius and the Princess III Time Limit:1000MS     Memory Limit:32768KB     64bit IO Form ...

  8. hdu 1028 Ignatius and the Princess III 简单dp

    题目链接:hdu 1028 Ignatius and the Princess III 题意:对于给定的n,问有多少种组成方式 思路:dp[i][j],i表示要求的数,j表示组成i的最大值,最后答案是 ...

  9. HDU 1028 Ignatius and the Princess III (递归,dp)

    以下引用部分全都来自:http://blog.csdn.net/ice_crazy/article/details/7478802  Ice—Crazy的专栏 分析: HDU 1028 摘: 本题的意 ...

随机推荐

  1. session的基本原理及安全性

    1.session原理 提到session,大家肯定会联想到登录,登录成功后记录登录状态,同时标记当前登录用户是谁.功能大体上就是这个样子,但是今天要讲的不是功能,而是实现.通过探讨session的实 ...

  2. 【SFA官方译文】:Spring Cloud Data Flow中的ETL

    原创: 影宸风洛 SpringForAll社区 昨天 原文链接:https://www.baeldung.com/spring-cloud-data-flow-etl 作者:Norberto Ritz ...

  3. 绝对音乐No.1

    最近儿子在练天空之城钢琴曲.为了方便他听久石让的原版,绝对做张cd.另外加入了自己比较喜欢的几首乐曲.在家音响上聆听时发现,不管是中国乐曲,还是西洋乐,都很美,耳朵都出油了.放到网盘供喜爱之人欣赏,喜 ...

  4. [THUWC2017]在美妙的数学王国中畅游

    [THUWC2017]在美妙的数学王国中畅游 e和sin信息不能直接合并 泰勒展开,大于21次太小,认为是0,保留前21次多项式即可 然后就把e,sin ,kx+b都变成多项式了,pushup合并 上 ...

  5. bzoj1030 文本生成器

    题目链接 题意 给出\(n\)个字符串,要构造一个长度为\(m\)的字符串\(S\),使得给出的\(n\)个字符串中至少有一个是\(S\)的子串.问方案数. 思路 \(AC\)自动机+\(DP\) 考 ...

  6. ImageMagick - 设置透明带 AlphaChannel 的 png 图片的透明度

    学习和使用ImageMagick也有几年时间了,其实对 ImageMagick 的了解还仅仅是皮毛吧. 最近在写代码的时候,遇到一个调整透明png图片透明度的问题: 当1张png图片,有些区域是透明的 ...

  7. flutte项目命令行打包

    进入自己flutter项目根目录,运行以下命令 flutter build apk #打包安卓 flutter build ios #打包ios 然后会给出一个路径,就是打包完成的apk的位置 bui ...

  8. 记录EXCEL格式和TXT文本格式之间的互转

    EXCEL格式转变成TXT文本格式 1.打开execl文档,点击文件另存为 2.选择txt保存 3.重命名文档,打开该txt文档 4.按Ctrl+H,将文档中空格转换成其他分割符,单击确定 TXT格式 ...

  9. 一个时间上的比较 if else

    if (w<b.w) ; if (w>b.w) ; if (w<b.w) ; else if (w>b.w) ; 对于任何情况,执行的次数都是一样.只是对于汇编的代码,第二个方 ...

  10. NOIP 提高组 2014 飞扬的小鸟(记录结果再利用的DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9937201.html 参考资料: [1]:https://www.luogu.org/blog/xxzh242 ...