题意:

一个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();
}
}
}

hdu1261 JAVA的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

随机推荐

  1. C++的标识符的作用域与可见性

    下面是关于C++的标识符的作用域与可见性学习记录,仅供参考 标识符的作用域与可见性 作用域是一个标识符在程序正文中有效的区域. 作用域分类 ①函数原型作用域 ②局部作用域(快作用域) ③类作用域 ④文 ...

  2. 剑指 Offer 56 - II. 数组中数字出现的次数 II + 位运算

    剑指 Offer 56 - II. 数组中数字出现的次数 II Offer_56_2 题目详情 解题思路 java代码 package com.walegarrett.offer; /** * @Au ...

  3. 剑指 Offer 55 - II. 平衡二叉树 + 平衡二叉树(AVL)的判断

    剑指 Offer 55 - II. 平衡二叉树 Offer_55_2 题目描述 方法一:使用后序遍历+边遍历边判断 package com.walegarrett.offer; /** * @Auth ...

  4. Vulnhub dc-4靶机通关

    Vulnhub dc-4靶机通关 下载地址:https://download.vulnhub.com/dc/DC-4.zip 安装好dc-4靶机 使用局域网查看器扫描到ip地址 端口扫描,发现运行了8 ...

  5. Java 重入锁和读写锁

    本文部分摘自<Java 并发编程的艺术> 重入锁 重入锁 ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁.除此之外,该锁还支持获取锁时 ...

  6. Python基础(2)——循环和分支[xiaoshun]

    一.瞎扯 世界上一切的系统都可以被'分支'表示.循环也是分支,只不过又重复之前的'分支'选择罢了.程序如人生,每一次的'分支',每一次的选择,都会有不同的结果: 有的选择止步不前,无限循环: 有的选择 ...

  7. 《进击吧!Blazor!》系列入门教程 第一章 7.图表

    <进击吧!Blazor!>是本人与张善友老师合作的Blazor零基础入门教程视频,此教程能让一个从未接触过Blazor的程序员掌握开发Blazor应用的能力. 视频地址:https://s ...

  8. React实用技巧

    取消请求 React 中当前正在发出请求的组件从页面上卸载了,理想情况下这个请求也应该取消掉,那么如何把请求的取消和页面的卸载关联在一起呢? 这里要考虑利用 useEffect 传入函数的返回值: u ...

  9. Shuffle Card HDU - 6707

    题目链接:https://vjudge.net/problem/HDU-6707 题意:给你一个数组a[ ](a[1]=1,a[2]=2.....a[n]=n),然后m次操作,每次把那个数拿到最前面去 ...

  10. P1426 小鱼会有危险吗(JAVA语言)

    题目描述 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%.有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是 ...