题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1163

解题报告:

将整数N分解为:两个及以上的不重复的整数,最流行的解法是动态规划,和生成函数(01背包思路)。

将问题看成经典的搭积木的问题。相当与求:将N块积木搭成J排.

f[i,j] = f[i,j-1]+ f[i-j,j-1];

初始化f[0,0] = 1;

即求f[N,N] - 1;(两个及以上的)

#include <stdio.h>
#include <algorithm>
#include <string.h>
#define MAX 505 using namespace std; long long dp[MAX][MAX]; int main()
{
/*memset(dp,0,sizeof(dp));
dp[0] = 1;
for(int i=1; i<MAX; i++)
for(int j=MAX-1; j>=i; j--)
dp[j] += dp[j-i];*/ int n;
dp[][]=; for(int i=; i<MAX; i++)
{
for(int j=; j<=i; j++)
dp[i][j]=dp[i][j-]+dp[i-j][j-]; for(int j=i+; j<MAX; j++)
dp[i][j]=dp[i][i];
} while(scanf("%d",&n),n)
printf("%lld\n",dp[n][n]-); return ;
}

生成函数算法,这里的知识是离散数学中的母函数。

G(X) = (1+X)(1+X^2)(1+X^3)***(1+X^N);

这里可以看出x^3的系数为 X*X^2, 和X^3,因为这里的拆数是拆成两个及以上,所以减去X^3,及要减1;

f[j]表示x^j的系数,那么计算x^j的系数,是要累加的,这里采用01背包,f[j] += f[j-i];(i=1~0(j=i))

memset(dp,,sizeof(dp));
dp[] = ;
for(int i=; i<MAX; i++)
for(int j=MAX-; j>=i; j--)
dp[j] += dp[j-i];
printf("%d\n",dp[n]-);

整数N分解,搭积木,离散数学中的母函数,ZOJ(1163)的更多相关文章

  1. 搭积木(block)

    [问题描述]小 OY 是一个喜欢搭积木的孩子,他有一天决定向小 C 展示他特别的搭积木技巧.现在一条直线上从左到右有 n 个位置,标号 1..n,第 i 个位置坐标为 x_i.每个位置上都预先叠好了一 ...

  2. codevs 1255 搭积木 x

    1255 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木 ...

  3. Leo 搭积木

    Leo 搭积木[问题描述]Leo是一个快乐的火星人,总是能和地球上的 OIers玩得很 high.2012 到了, Leo 又被召回火星了,在火星上没人陪他玩了,但是他有好多好多积木,于是他开始搭积木 ...

  4. XJOI1657&Codevs1255搭积木【树状动规】

    搭积木 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10)比如上图N=13 H=6 M=2. 输入格式: 第一行 ...

  5. codevs 3249 搭积木

    提交地址:http://codevs.cn/problem/3249/ 3249 搭积木  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目 ...

  6. [Luogu 2816]宋荣子搭积木

    Description saruka非常喜欢搭积木,他一共有n块积木.而且saruka的积木很特殊,只能一块块的竖着摞,可以摞很多列.说过saruka的是特殊的积木了,这些积木都非常智能,第i块积木有 ...

  7. 搭积木(java)-蓝桥杯

    搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9.搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小.最后搭成4层的金字塔形,必须用完所有的积木.下 ...

  8. 《陪孩子像搭积木一样学编程》,一起来玩Scratch(1)使用Scratch编程的基本流程

    编程是一件很有趣的事情.初次接触编程,你可能不知所措,别担心,这并不复杂.首先,为了让读者对编程有大概的了解,可以把编写Scratch程序的过程分成7个步骤(如图1.8).注意,这是理想状态.在实际的 ...

  9. codevs3249搭积木

    3249 搭积木  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description Petya有一个A×B×C的长方体积木,积 ...

随机推荐

  1. 自定义classLoader思考

    jvm对于类实例的区分 基于完全限定名+classLoader 不同的classLoader可以加载同一class,生成不同实例, 但是这两个class实例生成的对象不能强转 spring boot ...

  2. 使用 Moq 测试.NET Core 应用

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...

  3. 2018.6.1学习CSS5里顺丰盒子小问题

    在制作下面这样的小盒子时 编写的代码 首先要对li元素设置浮动. 在设置这个li元素下面的a元素时, 因为没有转行内块,inline-block,结果显示出来的页面,鼠标在经过这个选择时(:hover ...

  4. 移动测试之appium+python 环境安装(一)

    准备工作 一.Python安装 下载地址 及环境变量配置 注意:安装时候记得勾选上Add python.exe to Path.这可以省略环境变量配置. 如果没有勾选,安装下边操作 找到path环境变 ...

  5. Murano Service Architecture Introducation

    1. Murano Project Mission From the third-party tool developer’s perspective, the application catalog ...

  6. Kudu1.1.0 、 Kudu1.2.0 Kudu1.3.0的版本信息异同比较

    不多说,直接上干货!  Kudu1.1.0 新特性 python API升级,具备JAVA C++client一样的功能(从0.3版本直接升级到1.1),主要的点如下: 1.1. 改进了Parial ...

  7. DEDE列表页和内容页调用顶级栏目ID的方法

    dede模板中添加顶级栏目id的方法总结,使用dede顶级栏目id可以实现很多功能.比如,在每个列表页调用不同的栏目图片(同一顶级栏目调用相同的图片),如果我们做N个栏目就意味着要做N个列表页模板,显 ...

  8. pat1088. Rational Arithmetic (20)

    1088. Rational Arithmetic (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue F ...

  9. .NET面试题3

    1.什么是拆箱和装箱? 2.什么是箱子? 3.箱子放在哪里? 4.装箱和拆箱有什么性能影响? 5.如何避免隐身装箱? 6.箱子的基本结构? 7.装箱的过程? 8.拆箱的过程? 9.下面这段代码输出什么 ...

  10. mysql-sql命令

    ##本单元目标 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动 ...