首页 > 代码库 > 母函数
母函数
以几个几克砝码为例
1+x^2+x^4表示有2个2g砝码
1+x^3+x^6表示2个3g砝码
1+x^3+x^6+ x^9表示有3个3g砝码
问这些砝码有几种不一样的重量
f ( x ) = (1+x^2+x^4)×(1+x^3+x^6)×(1+x^3+x^6+ x^9)
得出结果有几个x就有几种不一样的重量
hdu2082典型的母函数问题
代码如下
#include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int N; scanf("%d",&N); LL a[60], b[60];//存放的是系数 while(N--) { int num; int i, j, k; for(i = 0; i <= 60; i++) { a[i] = b[i] = 0; } a[0] = 1; for(i = 1; i <= 26; i++) { scanf("%d",&num); if(num == 0) continue; for(j = 0; j <= 50; j++)//这两个for比较关键k*i+j,j,i代表的是指数 for(k = 0; k <= num && k*i+j <= 50; k++) b[k*i+j] += a[j]; for(j = 0; j <= 50; j++) { a[j] = b[j]; b[j] = 0; } } LL total = 0; for(int i = 1; i <= 50; i++) total += a[i]; printf("%lld\n",total); } return 0; }
整数的拆分的母函数代码
#include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int N; while(scanf("%d",&N) != EOF ) { LL a[60], b[60];//存放的是系数 int i, j, k; for(i = 0; i <= N; i++) { a[i] = 1; b[i] = 0; } for(i = 2; i <= N; i++) { for(j = 0; j <= N; j++)//这两个for比较关键k*i+j,j,i代表的是指数 for(k = 0; k*i+j <= N; k++) b[k*i+j] += a[j]; for(j = 0; j <= N; j++) { a[j] = b[j]; b[j] = 0; } } printf("%lld\n",a[N]); } return 0; }
母函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。