HDU 1028 整数拆分 HDU 2082 找单词 母函数
生成函数(母函数)
母函数又称生成函数。定义是给出序列:a0,a1,a2,...ak,...an,
那么函数G(x)=a0+a1*x+a2*x2+....+ak*xk +...+an* xn 称为序列a0,a1,a2,.......ak,......的母函数(即生成函数)。
1. 问题 n=x1+x2+x3+...+xk有多少个非负整数解?这道题是学排列与组合的经典例题了。
把每组解的每个数都加1,就变成n+k=x1+x2+x3+...+xk的正整数解的个数了。
教材上或许会出现这么一个难听的名字叫“隔板法”:把n+k个东西排成一排,在n+k-1个空格中插入k-1个“隔板”。
答案我们总是知道的,就是C(n+k-1,k-1)。它就等于C(n+k-1,n)。
它关于n的生成函数是g(x)=1/(1-x)^k。
2. 这个公式非常有用,是把一个生成函数还原为数列的武器。而且还是核武器。1/(1-x)^n=1+C(n,1)x^1+C(n+1,2)x^2+C(n+2,3)x^3+...+C(n+k-1,k)x^k+...。
找单词
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9784 Accepted Submission(s): 6805
然后包括N行数据,每行包括26个<=20的整数x1,x2,.....x26.








- #include <bits/stdc++.h>
- #define mp make_pair
- #define pb push_back
- #define fi first
- #define se second
- #define all(a) (a).begin(), (a).end()
- #define fillchar(a, x) memset(a, x, sizeof(a))
- #define huan printf("\n");
- #define debug(a,b) cout<<a<<" "<<b<<" "<<endl;
- using namespace std;
- const int maxn= 1e2+;
- const int inf = 0x3f3f3f3f;
- typedef long long ll;
- ll a[maxn],b[maxn];
- int main()
- {
- int t;
- cin>>t;
- while(t--)
- {
- fillchar(a,);
- fillchar(b,);
- a[]=;
- for(int i=;i<=;i++)
- {
- int x;
- cin>>x;
- for(int j=;j<=;j++)
- {
- for(int k=;k<=x&&(j+i*k<=);k++)
- {
- b[j+k*i]+=a[j];
- }
- }
- for(int j=;j<=;j++)
- {
- a[j]=b[j];
- b[j]=;
- }
- }
- ll ans=;
- for(int i=;i<=;i++)
- {
- ans+=a[i];
- }
- cout<<ans<<endl;
- }
- }
Ignatius and the Princess III
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25750 Accepted Submission(s): 17803
"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!"
递推法


- #include <bits/stdc++.h>
- #define mp make_pair
- #define pb push_back
- #define fi first
- #define se second
- #define all(a) (a).begin(), (a).end()
- #define fillchar(a, x) memset(a, x, sizeof(a))
- #define huan printf("\n");
- #define debug(a,b) cout<<a<<" "<<b<<" "<<endl;
- using namespace std;
- const int maxn= 1e2+;
- const int inf = 0x3f3f3f3f;
- typedef long long ll;
- ll a[maxn],b[maxn];
- int main()
- {
- int n;
- while(cin>>n)
- {
- fillchar(a,);
- fillchar(b,);
- a[]=;
- for(int i=;i<=n;i++) //枚举第i个多项式 每一项的系数都为1
- {
- for(int j=;j<=n;j++) //保留x0----xn项
- {
- for(int k=;j+i*k<=n;k++) //枚举第i个多项式的每一项
- {
- b[j+k*i]+=a[j]; //b数组保存中间值
- }
- }
- for(int j=;j<=n;j++)
- {
- a[j]=b[j]; //b数组传值给a
- b[j]=;
- }
- }
- cout<<a[n]<<endl;
- }
- }
- /*----------------------------------------------------------------------------------------*/
- #include<bits/stdc++.h>
- #define ll long long
- using namespace std;
- //记忆化递归法求解整数划分
- ll ans[][];
- ll GetPartitionCount(int n, int m)
- {
- if(ans[n][m]>)
- return ans[n][m];
- if (n == || m == )return ans[n][m]=;
- if (n < m)return ans[n][m]=(GetPartitionCount(n, n));
- if (n == m)return ans[n][m]=( + GetPartitionCount(n, n - ));
- else return ans[n][m]=(GetPartitionCount(n - m, m) + GetPartitionCount(n, m - ));
- }
- int main()
- {
- int n,m;
- ll sum;
- while (scanf("%d",&n)==)
- {
- memset(ans,,sizeof(ans));
- m=n;
- sum = GetPartitionCount(n, m);
- printf("%lld\n", sum);
- }
- return ;
- }
HDU 1028 整数拆分 HDU 2082 找单词 母函数的更多相关文章
- Ignatius and the Princess III HDU - 1028 || 整数拆分,母函数
Ignatius and the Princess III HDU - 1028 整数划分问题 假的dp(复杂度不对) #include<cstdio> #include<cstri ...
- HDOJ 2082 找单词 (母函数)
找单词 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu,1028,整数拆分的理解
#include"iostream"using namespace std;int main() { int n,i,j,k; int c[122],temp[122]; //c[ ...
- HDU 1028 整数拆分问题 Ignatius and the Princess III
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDU 2082 找单词 (普通型 数量有限 母函数)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2082 找单词 Time Limit: 1000/1000 MS (Java/Others) Me ...
- hdu acm 2082 找单词
找单词 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 1028 Ignatius and the Princess III(母函数整数拆分)
链接:传送门 题意:一个数n有多少种拆分方法 思路:典型母函数在整数拆分上的应用 /********************************************************** ...
- HDU 1028 Ignatius and the Princess III (生成函数/母函数)
题目链接:HDU 1028 Problem Description "Well, it seems the first problem is too easy. I will let you ...
- hdu2082 找单词 (母函数)
找单词 题意: 中文题,考虑是不是要写个英文题意..(可惜英语水平不够 囧rz) (题于文末) 知识点: 母函数(生成函数): 生成函数有普通型生成函数和指数型生成函数 ...
随机推荐
- es5/6数组遍历以及常用的一些方法
数组的遍历方法 1...for(var i=0;i<arr.length;i++){ } ---------------------------------------------------- ...
- InvocationTargetException异常的深入研究-servlet的setAttribute与getAttribute
在某项目中,前端jsp传入的用户id数据通过session域传入后台servlet进行处理的过程中,无意间出现了InvocationTargetException异常 前端部分代码如下:测试代码,非原 ...
- Android(java)学习笔记173:服务(service)之绑定服务的细节
绑定服务的细节 1. 如果onbind方法返回值是null,onServiceConnect方法就不会被调用: 2. 绑定的服务,在系统设置界面,正在运行条目是看不到的: 3. 绑定的服务,不求同时生 ...
- 安装 配置 IIS
一 .找到 控制面板 ------ 在程序和功能 -----打开或关闭window 功能 :这里可能要等一下 才会显示 . 二‘.找到 Internet信息服务 ,勾选大部分如下图:点击 ...
- SoapUI对于Json数据进行属性值获取与传递
SoapUI的Property Transfer功能可以很好地对接口请求返回的数据进行参数属性获取与传递,但对于Json数据,SoapUI会把数据格式先转换成XML格式,但实际情况却是,转换后的XML ...
- 《3+1团队》【Alpha】Scrum meeting 3
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...
- mybaits2-Dao开发
项目结构: 1.创建project,导入相关依赖(前提).配置db.properties与mybaits-config #mysql驱动 db.driver=com.mysql.jdbc.Driver ...
- No-2.常用 Linux 命令的基本使用
常用 Linux 命令的基本使用 01. 学习 Linux 终端命令的原因 Linux 刚面世时并没有图形界面,所有的操作全靠命令完成,如 磁盘操作.文件存取.目录操作.进程管理.文件权限 设定等 在 ...
- xcode中自定义log打印
打印内容包括 在哪个文件中 ? 在哪个方法中? 将要执行什么操作? // 此打印实现前提: // 1.在.pch文件中实现自定义log打印方法,log名换为LCLog // 2.定义一个宏obje ...
- [BZOJ 3823]定情信物
题面 定情信物 题解 这题主要考高中物理和数学. 首先定义 \(f[i][j]\) 表示 \(i\) 维超立方体中第 \(j\) 维元素的数量,根据实际意义,我们可以推出递推式: \(f[i][j]= ...