整数N分解,搭积木,离散数学中的母函数,ZOJ(1163)
题目链接: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)的更多相关文章
- 搭积木(block)
[问题描述]小 OY 是一个喜欢搭积木的孩子,他有一天决定向小 C 展示他特别的搭积木技巧.现在一条直线上从左到右有 n 个位置,标号 1..n,第 i 个位置坐标为 x_i.每个位置上都预先叠好了一 ...
- codevs 1255 搭积木 x
1255 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木 ...
- Leo 搭积木
Leo 搭积木[问题描述]Leo是一个快乐的火星人,总是能和地球上的 OIers玩得很 high.2012 到了, Leo 又被召回火星了,在火星上没人陪他玩了,但是他有好多好多积木,于是他开始搭积木 ...
- XJOI1657&Codevs1255搭积木【树状动规】
搭积木 一种积木搭建方式,高为H的积木,最底层有M个积木,每一层的积木数是他的低一层的积木数+1或-1.总共有N个积木.(且每行积木数不超过10)比如上图N=13 H=6 M=2. 输入格式: 第一行 ...
- codevs 3249 搭积木
提交地址:http://codevs.cn/problem/3249/ 3249 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目 ...
- [Luogu 2816]宋荣子搭积木
Description saruka非常喜欢搭积木,他一共有n块积木.而且saruka的积木很特殊,只能一块块的竖着摞,可以摞很多列.说过saruka的是特殊的积木了,这些积木都非常智能,第i块积木有 ...
- 搭积木(java)-蓝桥杯
搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9.搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小.最后搭成4层的金字塔形,必须用完所有的积木.下 ...
- 《陪孩子像搭积木一样学编程》,一起来玩Scratch(1)使用Scratch编程的基本流程
编程是一件很有趣的事情.初次接触编程,你可能不知所措,别担心,这并不复杂.首先,为了让读者对编程有大概的了解,可以把编写Scratch程序的过程分成7个步骤(如图1.8).注意,这是理想状态.在实际的 ...
- codevs3249搭积木
3249 搭积木 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description Petya有一个A×B×C的长方体积木,积 ...
随机推荐
- 缓存方案:本地guavaCache, 远程redis?
线程内部缓存:a. 局部变量HashMap, 方法间传递 b. 使用ThreadLocal 本地缓存:单jvm内共享 可以使用(Concurrent)HashMap自己实现,也可以使用GuavaCa ...
- d题
#include<iostream>#include<algorithm>using namespace std;int a[200005];int b[200005];int ...
- 原生JS实现图片拖拽移动与缩放
看一下最终效果,图片可以拖动,可以缩放 把代码贴出来,可以直接粘贴使用,大致的思想就是鼠标按下的时候获取当时的鼠标位置,要减去left和top值,移动的时候获取位置减去初始的值就得到移动的时候的lef ...
- 关于int类型表示的最大位数
Integer 整型是有个范围的,而这个范围是跟平台版本有关的32位(最大值为:2^31 - 1)与64位(最大值为:2^63 - 1)的范围不一致.这时候超出范围的数字会被解释为float类型,所以 ...
- windows 远程到ubuntu桌面
Windows remote connect ubuntu desktop 1. install xRDP sudo apt-get update sudo apt-get install xrdp ...
- JS时间控件 moment.js用法
参考http://momentjs.cn/ 下载 moment.js moment.min.js 12.4k moment+多语言支持.js moment+多语言支持.min.js 45.4k 安装 ...
- call and apply
apply()把参数打包成Array再传入: call()把参数按顺序传入. Math.max.apply(null, [3, 5, 4]); // 5 Math.max.call(null, 3, ...
- Mac 终端执行sql命令
https://www.cnblogs.com/sbj-dawn/p/6905930.html. 远程登录MYSQL数据库 > mysql -u username -p -h hostname ...
- inventor怎样卸载干净
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- CentOS7/Ubuntu Linux java jdk 环境变量配置
[root@localhost sony]# tar -zxvf jdk-8u121-linux-x64.tar.gz [root@localhost sony]# .0_121 /usr/local ...