hdu_1028_母函数
虽然我很想自己写母函数讲解。。。但是最近事情太多了,就贴个很入门的讲解吧给出一个经典的模板A了这个题
http://blog.csdn.net/vsooda/article/details/7975485
//母函数
//G(x) = (1 + x^1 + x^2..+x^n)(1 + x^2 + x^4 + x^6 + ...)(1 + x^3 + x^6 +..)(..)(1 + x^n)
//第一个表达式(1 + x^1 + x^2..+x^n)中 x的指数代表【解中'1'的出现次数】 比如x^2 = x^(1 * 2) 这是'1'出现了两次 x^3 = x^(1 * 3) '1'出现3次
//相似的 第二个表达式(1 + x^2 + x^4 + x^6 + ...) x^4 = x^(2 * 2) '2'出现两次 x^6 = x^(2 * 3) '1'出现3次
//...以此类推 【* 1(0次项) 是代表该数字出现次数为0】 //乘法原理的应用:每一个表达式 表示的都是 某个变量的所有取值【比如第一个表达式 表示'1'可以取的值(即n拆分后'1'出现的次数)可以为 {0,1,2...n}】
//每个变量的所有取值的乘积 就是问题的所有的解(在本问题中表现为‘和’)
//例子:4 = 2 + 1 + 1就是 x^(1 * 2)【'1'出现2次】
// * x^(2 * 1)【'2'出现1次】
// * x^(3 * 0)【'3'出现0次】
// * x^(4 * 0)【..】
// 的结果
//上述4个分式乘起来等于 1 * (x^4) 代表 4的一个拆分解
//所以 G(x)展开后 其中x^n的系数就是 n的拆分解个数
# include <stdio.h> int main()
{
int C1[], C2[], n; while(scanf("%d", &n) != EOF)
{
for(int i = ; i <= n; i++)//初始化 第一个表达式 目前所有指数项的系数都为1
{
C1[i] = ;
C2[i] = ;
} for(int i = ; i <= n; i++)//第2至第n个表达式
{
for(int j = ; j <= n; j++)//C1为前i-1个表达式累乘后各个指数项的系数
{
for(int k = ; j + k <= n; k += i)//k为第i个表达式每个项的指数 第一项为1【即x^(i * 0)】(指数k=0),第二项为x^(i * 1)(指数为k=i), 第三项为x^(i * 2)... 所以k的步长为i
{
C2[j + k] += C1[j];//(ax^j)*(x^k) = ax^(j+k) -> C2[j+k] += a 【第i个表达式每一项的系数都为1; a为C1[j]的值(x^j的系数); C2为乘上第i个表达式后各指数项的系数】
}
}
for(int j = ; j <= n; j++)//刷新当前累乘结果各指数项的系数
{
C1[j] = C2[j];
C2[j] = ;
}
}
printf("%d\n",C1[n]);
} return ;
}
#include<cstdio>
#include<cstring>
using namespace std;
const int N = ;
int c1[N],c2[N];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i = ; i <= n; i++)
{
c1[i] = ;
c2[i] = ;
}
for(int i = ; i <= n; i++){
for(int j = ; j <= n; j++){
for(int k = ; j+k <=n; k+=i){
c2[j+k] += c1[j];
}
}
for(int j = ; j <= n; j++){
c1[j] = c2[j];
c2[j] = ;
}
}
printf("%d\n",c1[n]);
}
return ;
}
hdu_1028_母函数的更多相关文章
- hdu2082 找单词 (母函数)
找单词 题意: 中文题,考虑是不是要写个英文题意..(可惜英语水平不够 囧rz) (题于文末) 知识点: 母函数(生成函数): 生成函数有普通型生成函数和指数型生成函数 ...
- hdu1521 排列组合(指数型母函数)
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数. (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...
- Thinkphp的单字母函数整理
有人不太喜欢TP这种单字母函数,其实这也是TP的一个特色,如果理解了这些函数的作用,不管是背,还是写,都是非常方便的,接下来我们以字母顺序开始.A函数 B函数 C函数 D函数 F函数 L函数 R函数 ...
- ThinkPHP单字母函数(快捷方法)使用总结
在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...
- hdu 1398 Square Coins (母函数)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- [BZOJ3696][FJSC2014]化合物(异或规则下的母函数)
题目:http://hzwer.com/3708.html 分析: 类似树分治思想,设f[x][i]表示以x为根的子树的所有点中,与x的距离为i的点有多少个,这个可以预处理出来 然后我们考虑每颗子树对 ...
- hdu1521 指数型母函数
排列组合 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- UVa12298 Super Poker II(母函数 + FFT)
题目 Source http://acm.hust.edu.cn/vjudge/problem/23590 Description I have a set of super poker cards, ...
- HDU4609 3-idiots(母函数 + FFT)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4609 Description King OMeGa catched three men wh ...
随机推荐
- JAVA 解析、编辑nginx.conf
最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf 在github上找到nginx-java-parser工具,项目地址:https://github.com/odiszapc/ng ...
- CET——4 常用短语
在网上看到的,先拔到自己这来,四级大大,求过!!!!
- Git常用命令清单笔记
git github 小弟调调 2015年01月12日发布 赞 | 6收藏 | 45 5k 次浏览 这里是我的笔记,记录一些git常用和一些记不住的命令,这个笔记原本是基于 颜海镜的文章增加 ...
- Java 哲学家进餐
某次操作系统实验存档.V 这个哲学家除了吃就知道睡.( ╯□╰ ) 哲学家.java: package operating.entity.philosophyeating; import operat ...
- bzoj 2337: [HNOI2011]XOR和路径
Description Input Output Sample Input Sample Output HINT Source Day2 终于把这个史前遗留的坑给填了... 首先异或的话由位无关性,可 ...
- Spring任务调度之Quartz集成
推荐一个博客:http://blog.csdn.net/column/details/14251.html 基本概念 Job:是一个接口,只有一个方法void execute(JobExecution ...
- im4java包处理图片
使用方法:首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了.package com.stu.util; import java.io.IOE ...
- CentOS 7.x上gitlab搭建教程(https可用,邮件可用)
目录 知识要求 搭建感想 搭建过程 参考 知识要求: nginx基础知识 搭建感想 注:以下是我搭建gitlab时的思考,需要nginx的基础知识,Docker的基础知识才容易理解,与下面的搭建过程是 ...
- ES6(三)数组的扩展
1.Array.form ES6中,Array.from = function(items,mapfn,thisArg) { } Array.from 用于将 类数组 和 可遍历对象(实现了It ...
- Netty对Protocol Buffer的支持(七)
Netty对Protocol Buffer的支持(七) 一.简介 在上一篇博文中笔者已经介绍了google的Protocol Buffer的使用,那么本文笔者就开始介绍netty对Protocol B ...