HDU acm1028 整数划分 递归问题(递推)
我们用递归+记忆化的方法来解决普通整数划分问题:定义 f(n,m)为将整数n划分为一系列整数之和,其中加数
最大不超过m。
得到下面的递推关系式:
当n==1 || m==1 只有一种划分,即 1 或者 1+1+1......+1
当m>n 显然,等价于 f(n,n)
当m==n 此时:我考虑加数包含m与否的两种情况:
1)划分不包含m,即f(n,m-1)---所有m-1的划分
2)划分包含 m,此时只有一种即 m
所以当m==n时,有 f(n,m)=f(n,m-1)+1
当m<n时,
1)包含m时,{m,x1,x2,x3....xi}此时 等价于 f(n-m,m)
2)不包含m时,显然f(n,m-1)
所以f(n,m)=f(n,m-1)+f(n-m,m)
采用记忆化技术优化复杂度:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 130
int num[MAXN][MAXN];
int dp(int n,int k)
{
if(n==||k==)
return ;
if(k>n)
{
k=n;
if(num[n][n]==-)
return num[n][n]=dp(n,n);
else
return num[n][n];
}
else if(k==n)
{
if(num[n][k]==-)
return num[n][k]=dp(n,k-)+;
else
return num[n][k];
}
else
{
if(num[n][k]==-)
return num[n][k]=dp(n,k-)+dp(n-k,k);
else
return num[n][k];
}
}
int main()
{
int n;
while(cin>>n)
{
memset(num,-,sizeof(num));
cout<<dp(n,n)<<endl;
}
return ;
}
HDU acm1028 整数划分 递归问题(递推)的更多相关文章
- 大概是:整数划分||DP||母函数||递推
整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行. ...
- Chapter1 递归与递推
Chapter 1 递归与递推 时间复杂度(转载自yxc大佬) 一般ACM或者笔试题的时间限制是1秒或2秒. 在这种情况下,C++代码中的操作次数控制在 107107 为最佳. 下面给出在不同数据范围 ...
- 斐波那契数列 递归 尾递归 递推 C++实现
==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...
- HDU 4834 JZP Set(数论+递推)(2014年百度之星程序设计大赛 - 初赛(第二轮))
Problem Description 一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S.例如,n=3,S={1 ...
- hdu 5335 Walk Out(bfs+斜行递推) 2015 Multi-University Training Contest 4
题意—— 一个n*m的地图,从左上角走到右下角. 这个地图是一个01串,要求我们行走的路径形成的01串最小. 注意,串中最左端的0全部可以忽略,除非是一个0串,此时输出0. 例: 3 3 001 11 ...
- 动态规划——数字三角形(递归or递推or记忆化搜索)
动态规划的核心就是状态和状态转移方程. 对于该题,需要用抽象的方法思考,把当前的位置(i,j)看成一个状态,然后定义状态的指标函数d(i,j)为从格子出发时能得到的最大和(包括格子本身的值). 在这个 ...
- HDU 5459 Jesus Is Here(递推)
http://acm.hdu.edu.cn/showproblem.php?pid=5459 题意: S(1) = c,S(2) = ff, S(3) = cff,之后S(i) = S(i-1)+S( ...
- hdu 1028 & hdu 1398 —— 整数划分(生成函数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1028 整数划分,每个数可以用无限次: 所以构造 f(x) = (1+x+x2+x3+...)(1+x2+x ...
- hdu 2050 折线分割平面 dp递推 *
折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
随机推荐
- struts1.3中使用DispatchAction的一个问题
近期做项目发现我们公司的项目是用struts1写的,在多方百度下,总有理解了struts1.3的DispatchAction的使用方法 一:struts.xml文件的配置 <?xml versi ...
- SQL获取年月日方法
方法一:利用DATENAME 在SQL数据库中,DATENAME(datetype,date)函数的作用是从日期中提取指定部分数据,其返回类型是nvarchar.datetype类型见附表1. SEL ...
- PC常用电源IC、MOS、三极管、二极管厂家
笔记本常用MOS.三极管.二极管厂家: 1.EMC 杰力电子(台湾)官方网站:http://www.excelliancemos.com/tw/solution.php 2.UBIQ(台湾电源厂家UP ...
- 【转载】FAT32文件系统详解
硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的形式存储在硬盘上.任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式.例如:常见的文件系统有FAT,NTFS,EXT ...
- 更新 手淘 flexible 布局 rem 单位适配问题
详见链接 https://github.com/amfe/lib-flexible
- ThinkPHP5 安装自定义模块
安装官方给的demo,在build.php文件中 <?php // +-------------------------------------------------------------- ...
- android handler looper
http://www.cnblogs.com/plokmju/p/android_Handler.html
- iOS側拉栏抽屉效果Demo
源代码下载 側拉栏抽屉效果Demo 须要导入第三方的类库例如以下: 抽屉效果所需第三方类库下载 效果:既能够两側都实现抽屉效果也可仅仅实现左側栏或者右側栏的抽屉效果 waterm ...
- iOS9新特性之新添加的关键字
iOS9 新出的关键字:用来修饰属性,或者方法的参数,返回值 好处:1.迎合swift 2.提高我们开发人员开发规范,减少程序员之间的交流 注意:iOS9新出的的关键字nonnull,nullable ...
- [不好分类]iphone手机激活错误的处理过程
同事一台iphone 6s手机,重启后显示无法激活.(欢迎访问viphhs,欢迎转载.https://www.cnblogs.com/viphhs) 百度后尝试更换了手机卡,重新连接wifi,都不能恢 ...