题意:

一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA".给定若干字母和它们相应的个数,计算一共可以组成多少个不同的字符串.

思路:

刚开始一看这个题目感觉指数型母函数,结果直接水敲,然后水wa了,哎,SB了,后来大体一算这个题目的答案肯定是几百位,然后就自己写啊写啊写,各种wa,后来放弃了,干脆去学JAVA大数,之前没用过,就输入输出,转换格式,class什么的捅咕了一个晚上,终于a了,费劲啊,

其实这个题目没有必要用母函数,母函数计算什么的复杂(自己JAVA什么不会,刚学的结合到母函数里就感觉复杂了) , 其实我们可以用组合数学的思想来做 ,想想假如有N个不同的数,他们能组合的个数是 N!,但是本题中则可能出现相同的数字,所以答案肯定相对较少,

我们先假设这些数字不同,则是 N!(n 不是题目中的n而是所有数字的总个数 sum),然后考虑出现相同的情况, 假如有AAA,当初我们把他们当成三个不同的数,所以只要除以这三个数的组合数(1 * 2 * 3)就能还原回去了,所有的都这么处理,答案则是:

sum : 所有数字个数和

c[i] : i 有多少个

ans =    sum! / (c[1]! * c[2]! * .....*c[n]!);

下面是自己的 WA的母函数 和 Ac的组合数(Ac的这个代码是在网上找的,自己一开始JAVA什么都不会 ,明天会再写个JAVA 常用的东西)

#include<stdio.h>

double
c[30] ,c1[26*12+10] ,c2[26*12+10];
double
jcs[15]; void DB_JC()
{

jcs[0] = 1;
for(int
i = 1 ;i <= 13 ;i ++)
jcs[i] = jcs[i-1] * i;
} int main ()
{
int
i ,j ,k ,n ,m;
while(
scanf("%d" ,&n) && n)
{

m = 0;
for(
i = 1 ;i <= n ;i ++)
{

scanf("%lf" ,&c[i]);
m += int(c[i]);
}
for(
i = 0 ;i <= m ;i ++)
c1[i] = c2[i] = 0;
DB_JC();
c1[0] = 1.0 / jcs[0]; for(i = 1 ;i <= n ;i ++)
{
for(
j = 0 ;j <= m ;j ++)
for(
k = 0 ;k + j <= m && k <= c[i] ;k ++)
c2[k+j] += c1[j]/jcs[k];
for(
j = 0 ;j <= m ;j ++)
c1[j] = c2[j] ,c2[j] = 0;
}

printf("%I64d\n" ,int(c1[m] * jcs[m]));
}
return
0;
}

组合数学 Ac JAVA 代码

import java.util.Scanner;
import
java.math.BigInteger; public class Main
{
public static void
main(String args[])
{
Scanner
cin = new Scanner(System.in);
BigInteger
f1, f2;
int []
s = new int[26];
int
n, sum;
n = cin.nextInt();
while (
n != 0)
{

sum = 0;
for (int
i=0; i<n; ++i)
{

s[i] = cin.nextInt();
sum += s[i];
}

f1 = new BigInteger("1");
for (int
i=1; i<=sum; ++i)
{

f1 = f1.multiply(BigInteger.valueOf(i));
}

f2 = new BigInteger("1");
for (int
i=0; i<n; ++i)
{
for (int
j=1; j<=s[i]; ++j)
{

f2 = f2.multiply(BigInteger.valueOf(j));
}
}
System.
out.println(""+f1.divide(f2));
n = cin.nextInt();
}
}
}

最新文章

  1. 主流 SQLServer 迁移到 MySQL 工具对比
  2. BZOJ 1588: [HNOI2002]营业额统计
  3. java框架篇---spring AOP 实现原理
  4. 服务--web服务
  5. ANDROID_MARS学习笔记_S01原始版_007_Handler及线程的简单使用
  6. linux添加用户
  7. Gym 100917C Constant Ratio 数论+暴力
  8. 进入html+css世界的正确姿势
  9. UTF-8编码与GBK编码下的字符长度
  10. [c/c++] programming之路(24)、字符串(五)——字符串插入,字符串转整数,删除字符,密码验证,注意事项
  11. day30 hashlib模块
  12. C# ASP.NET MVC 配置允许跨域访问
  13. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth(重识搜索)
  14. poj 1125 Stockbroker Grapevine(最短路径)
  15. 【读书笔记】iOS-网络-使用Bonjour实现自组织网络
  16. Parse how to write flash in uefi shell.
  17. 7zip
  18. Linux下的堆off-by-one的利用
  19. Android -- 程序启动画面 Splash
  20. postgresql----SELECT

热门文章

  1. keras报错:AttributeError: &#39;_thread._local&#39; object has no attribute &#39;value&#39;
  2. AI数学基础之:概率和上帝视角
  3. 部分rpm包总结描述
  4. 为什么要从 Linux 迁移到 BSD3
  5. Linux系统用户与用户组管理
  6. 解决springMVC https环境 jstlview redirect时变为http请求的问题
  7. Mac下安装lightgb并在jupyter中使用
  8. Ingress-nginx工作原理和实践
  9. JS中EventLoop、宏任务与微任务的个人理解
  10. Android Studio 之 ImageView 学习笔记