Ignatius and the Princess

Description

       "Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says.       
"The second problem is, given an positive integer N, we define an equation like this:          N=a[1]+a[2]+a[3]+...+a[m];          a[i]>0,1<=m<=N;        My question is how many different equations you can find for a given N.        For example, assume N is 4, we can find:          4 = 4;          4 = 3 + 1;          4 = 2 + 2;          4 = 2 + 1 + 1;          4 = 1 + 1 + 1 + 1;        so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. Now, you do it!"

Input

The input contains several test cases. Each test case contains a positive integer N(1<=N<=120) which is mentioned above. The input is terminated by the end of file.

Output

For each test case, you have to output a line contains an integer P which indicate the different equations you have found.

Sample Input

4
10
20

Sample Output

5
42
627
 
刚看到题目是k个数相加为n的题目,第一反应是求1到n元的一次不定方程求解,用插板的方法就能求出通项,但是考虑到这k元未知数是没有先后关系的,也就是说任意(a,a)和(a,a)是相同的。于是不能这样考虑。
然后考虑到每组解必然有个最大值,于是设了这样一个函数(或者数组)f(n,k),表示和为n且最大数为k的上述元数不定的方程的解的个数。这样一来题目要求求得就是f(n,1)到f(n,n)的和了。
然后我们考虑,对于f(n,k)如果去掉最大值k,那么其子问题就是求和为n-k且最大值小于等于k的上述方程的解的个数。 于是得到递推方程:
但是考虑到n-k或许会比k还要小,于是更新递推方程为:
然后打表求f(n,k)即可,此外用f(n,0)来存所有f(n,i)的和。用数组实现。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <vector>
#define inf 0x3fffffff using namespace std; int a[125][125]; int main()
{
//freopen ("test.txt", "r", stdin);
memset (a, 0, sizeof(a));
for (int i = 1; i <= 120; ++i)
{
for (int j = 1; j <= i; ++j)
{
if (i == 1 || i == j)
{
a[i][j] = 1;
}
else
{
for (int k = 1; k <= j && k <= i-j; ++k)
{
a[i][j] += a[i-j][k];
}
}
a[i][0] += a[i][j];
}
}
int n;
while(scanf("%d", &n) != EOF)
{
printf ("%d\n", a[n][0]);
}
return 0;
}

ACM学习历程—HDU1028 Ignatius and the Princess(组合数学)的更多相关文章

  1. ACM学习历程—HDU1028 Ignatius and the Princess III(递推 || 母函数)

    Description "Well, it seems the first problem is too easy. I will let you know how foolish you ...

  2. ACM学习历程—HDU2068 RPG的错排(组合数学)

    Description 今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁.RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿 ...

  3. 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 ...

  4. HDU1028 Ignatius and the Princess III 【母函数模板题】

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

  5. hdu1028 Ignatius and the Princess III(递归、DP)

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

  6. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告

  7. ACM学习历程—HDU 5512 Pagodas(数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是给了初始的集合{a, b},然后取集合里 ...

  8. ACM学习历程—HDU5521 Meeting(图论)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是一个人从1开始走,一个人从n开始走.让最 ...

  9. ACM学习历程—HDU2476 String painter(动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多 ...

随机推荐

  1. dede频道标签channel和频道内容标签channelartlist的调用栏目名的不同方式,如果错误使用标签会发生错误

    频道标签 [field:typename/] 频道内容标签 {dede:field name='typename'/}

  2. opencl教程

    http://www.altera.com.cn/corporate/news_room/releases/2013/products/nr-opencl-sdk-13.0.html http://w ...

  3. 【转】2018年EI收录中文期刊目录

    序号 中文刊名 收录情况 1 声学学报 保持收录 2 航空学报 保持收录 3 兵工学报 保持收录 4 自动化学报 保持收录 5 电子学报 保持收录 6 太阳能学报 保持收录 7 测绘学报 保持收录 8 ...

  4. tao.opengl+C#绘制三维模型

    一.tao.Opengl技术简介 Opengl是一种C风格的图形库,即opengl中没有类和对象,只有大量的函数.Opengl在内部就是一个状态机,利用不同的函数来修改opengl状态机的状态,以达到 ...

  5. eclipse集成tomcat改动字符集參数

    问题: 在eclipse 4.4(Luna)中集成tomcat时,直接改动原tomcat文件夹中的配置文件,不起作用. 有时.我们会修改字符集參数为utf-8,以解决中文乱码问题,修改之后依旧乱码-- ...

  6. C#利用SharpZipLib进行文件的压缩和解压缩

    我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来, ...

  7. PHP错误调试

    一:错误类型举例 1.语法错误:一般是语句最后缺少分号.缺少单引号或双引号.for循环或函数缺少花括号.缺少变量标示符$ 2.定义错误:一般是调用不存在的变量.调用不存在的函数或者类 3.逻辑错误:代 ...

  8. windows系统下nodejs、npm、express的下载和安装教程——2016.11.09

    1. node.js下载 首先进入http://nodejs.org/dist/,这里面的版本呢,几乎每个月都出几个新的,建议大家下载最新版本,看看自己的电脑是多少位的,别下错了. 下载完解压到你想放 ...

  9. 我的Android进阶之旅------>自己写个Activity来调节Android系统背光亮度Brightness

    今天终于算初步写好了一个调节系统背光亮度Brightness的代码,本来不看Android源代码以为可以直接调用某个Action来启动系统的那个调节Brightness的对话框,但是看了代码后发现系统 ...

  10. Django 初始化数据库

    django 初始化数据库 刷新数据库guoguos-MacBook-Pro:mysite guoguo$ python manage.py sqlflushBEGIN;SET FOREIGN_KEY ...