整数划分(二)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

把一个正整数m分成n个正整数的和,有多少种分法?

例:把5分成3个正正数的和,有两种分法:

1 1 3

1 2 2

 
输入
第一行是一个整数T表示共有T组测试数据(T<=50)
每组测试数据都是两个正整数m,n,其中(1<=n<=m<=100),分别表示要拆分的正数和拆分的正整数的个数。
输出
输出拆分的方法的数目。
样例输入
  1. 2
  2. 5 2
  3. 5 3
样例输出
  1. 2
  2. 2
来源
[张云聪]原创
上传者
张云聪
 
在整数划分(一)的基础上改编的,整数划分(一)里有详解:http://www.cnblogs.com/xl1027515989/p/3603533.html
针对此题,方法和整数划分(一)类似:

首先 定义f ( i , j )为整数  i  分成 j  个整数 的情况
经过分析可得f(i, j )可转化为两个部分:
一:  假设 分成的  j  个整数中 不包含1。。那么 此时 f (i-j,j)就是这部分的总情况,既然想让他不包含1,就先将j个整数都分为1,此时i变为i-j,再将i分为j个整数,这j个整数再加上原先分的1,就肯定不会再有1出现了。如果i-j<j的话,f (i-j,j)的值为0
二: 假设分成的j个整数至少有一个1。。那么此时f(i-1,j-1)

代码如下(一)

  1. #include <stdio.h>
  2. int f(int m,int n)
  3. {
  4. if(m==n||n==)
  5. return ;
  6. else if(m<n)
  7. return ;
  8. else if(m>n)
  9. return f(m-,n-)+f(m-n,n);
  10. }
  11. int main()
  12. {
  13. int T;
  14. scanf("%d",&T);
  15. while(T--)
  16. {
  17. int m,n;
  18. scanf("%d%d",&m,&n);
  19. printf("%d\n",f(m,n));
  20. }
  21. return ;
  22. }
  23. //AC
  24. //首先 定义f ( i , j )为整数 i 分成 j 个整数 的情况
  25. //经过分析可得f(i, j )可转化为两个部分:
  26. //一: 假设 分成的 j 个整数中 不包含1。。那么 此时 f (i-j,j)就是这部分的总情况,既然想让他不包含1,就先将j个整数都分为1,此时i变为i-j,再将i分为j个整数,这j个整数再加上原先分的1,就肯定不会再有1出现了。如果i-j<j的话,f (i-j,j)的值为0
  27. //二: 假设分成的j个整数至少有一个1。。那么此时f(i-1,j-1)
  28. //

代码如下(二):

  1. #include <stdio.h>
  2. int s[][];
  3. int f(int m,int n)
  4. {
  5. if(s[m][n]!=)
  6. return s[m][n];//用数组保存已处理过的数据节约时间
  7. if(m==n||n==)
  8. return ;
  9. else if(m<n)
  10. return ;
  11. else if(m>n)
  12. return s[m][n]=f(m-,n-)+f(m-n,n);
  13. }
  14. int main()
  15. {
  16. int T;
  17. scanf("%d",&T);
  18. while(T--)
  19. {
  20. int m,n;
  21. scanf("%d%d",&m,&n);
  22. printf("%d\n",f(m,n));
  23. }
  24. return ;
  25. }
  26. //AC

nyoj_176_整数划分(二)_201404261715的更多相关文章

  1. 递归---NYOJ-176 整数划分(二)和NYOJ-279队花的烦恼二

    这道题目的递归思想和第一个题差不多, 主要思想是:func(n, m)的作用是将n划分为m个. 1. 如果n < m 的时候肯定是不能划分的,所以就返回0 2. 如果m = 1 或者 n = m ...

  2. NYOJ-571 整数划分(三)

    此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...

  3. 整数划分 Integer Partition(二)

    本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中  m1 m2 ... mi连续,比如5=1+4就不符合 ...

  4. 整数划分 Integer Partition(一)

    话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...

  5. POJ1664(整数划分)

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30894   Accepted: 19504 Description ...

  6. 大概是:整数划分||DP||母函数||递推

    整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...

  7. hdu-2709整数划分 技巧

    整数划分变形,由2^k组成. 整数划分中一个节约内存的技巧,平时我们使用dp[i][j]维护用不大于j的数组合成i的方案数,所以必须dp[i-j][j]->dp[i][j].这样就需要二位,如果 ...

  8. poj1664 放苹果(DPorDFS)&&系列突破(整数划分)

    poj1664放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33661   Accepted: 20824 Desc ...

  9. Codeforces 1326F2 - Wise Men (Hard Version)(FWT+整数划分)

    Codeforces 题目传送门 & 洛谷题目传送门 qwq 这题大约是二十来天前 AC 的罢,为何拖到此时才完成这篇题解,由此可见我是个名副其实的大鸽子( 这是我上 M 的那场我没切掉的 F ...

随机推荐

  1. AJPFX编写cmd界面下一键编译、执行java代码的bat脚本

    此脚本适合刚接触java的同学,在cmd界面下用jc取代 复杂的  javac *.java + java main使用说明:把脚本内容复制到txt文本中,修改后缀名为.bat,运行一次即可完成配置, ...

  2. html添加css——样式选择器

    如何给html添加样式.两种方法: 一.新建立一个css样式表,与原html同目录,然后通过link标签链接.如:<link type="text/css" rel=&quo ...

  3. sql 关键字的用法

    coalesce( T.GoodsCode,'0') 若 T.GoodsCode 为NULL 这 用0替换 round(S.SaleEarning,2) 保留两位小数 SUBSTRING(zb.acc ...

  4. 11 Hash tables

    11 Hash tables    Many applications require a dynamic set that supports only the dictionary operatio ...

  5. Ryubook_1_switch_hub_部署执行

    一.环境: mininet.ovs.Ryu. 二.实验过程: 1.搭建拓扑: 执行sudo mn --topo single,3 --mac --switch ovsk --controller re ...

  6. DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp

    DNS隧道之DNS2TCP使用心得教程 转自:http://blog.creke.net/750.html DNS2TCP是在上次DNS隧道大检阅时提到的一个DNS隧道. 在2010年6月的更新(也是 ...

  7. python练习1 登录和三级菜单

    ,: username1 = input("请输入您的用户名:")# password1 = getpass.getpass("请输入您的密码:") passw ...

  8. java_tcp_简单示例

    package netProgram; import java.io.DataOutputStream; import java.io.IOException; import java.net.Ser ...

  9. python pandas读写excel

    import pandas as pd import numpy as np df = pd.read_csv("result.csv") # csv # df = pd.read ...

  10. 3D超炫酷旋转

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...