博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 3380 Patchouli's Spell Cards(概率+大数)
阅读量:6591 次
发布时间:2019-06-24

本文共 1359 字,大约阅读时间需要 4 分钟。

题目链接:

题意:m个位置,每个位置可以放n种数字(1-n)。问至少有L个位置数字一样的概率?

思路:反着想,我们先求出没有L个位置数字一样的放法ans。dp[i][j]表示前i种数字占据j个位置的放法数,dp[i][j]=sum(dp[i-1][j-k]*C[m-(j-k)][k])(k<L)。则ans=sum(dp[i][m])。则真正的答案Ans=n^m-ans。

import java.util.*;import java.math.*;public class Main{    static BigInteger dp[][]=new BigInteger[105][105];    static BigInteger C[][]=new BigInteger[105][105];            public static void puts(String s){        System.out.println(s);    }        public static void main(String[] args){                int i,j,k;        BigInteger one=BigInteger.ONE,zero=BigInteger.ZERO;        for(i=0;i<=100;i++){            C[i][0]=C[i][i]=one;            for(j=1;j
m) { puts("mukyu~"); continue; } for(i=0;i<=n;i++) for(j=0;j<=m;j++) dp[i][j]=zero; dp[0][0]=one; for(i=1;i<=n;i++) for(j=1;j<=m;j++) for(k=0;k
<=j;k++) { dp[i][j]=dp[i][j].add(dp[i-1][j-k].multiply(C[m-(j-k)][k])); } BigInteger ans=zero; for(i=1;i<=n;i++) ans=ans.add(dp[i][m]); BigInteger tot=BigInteger.valueOf(n).pow(m); ans=tot.subtract(ans); BigInteger gcd=ans.gcd(tot); ans=ans.divide(gcd); tot=tot.divide(gcd); System.out.println(ans+"/"+tot); } }}

  

转载地址:http://gckio.baihongyu.com/

你可能感兴趣的文章
Mysql迁移新环境索引损坏
查看>>
物联网协议之CoAP协议开发学习笔记之常用开源代码实现
查看>>
一些Mac的使用技巧
查看>>
spring event发布及监听实例
查看>>
JavaScript 之银弹の技法
查看>>
html+css+js开发文本编辑器,有各种排版功能!
查看>>
jQTips · 动态添加元素的清爽写法
查看>>
基于Thinkphp5+phpQuery 网络爬虫抓取数据接口,统一输出接口数据api
查看>>
webApp实战开发,仿网易新闻webApp
查看>>
利用css3修改input[type=radio]样式
查看>>
简单的文件缓存函数
查看>>
原生Js判断元素是否隐藏
查看>>
nodejs log4js配置使用
查看>>
Swift 代码小抄
查看>>
git小技巧--如何从其他分支merge个别文件或文件夹
查看>>
微信小程序——gulp处理文件
查看>>
ThoughtWorks技术雷达专区
查看>>
苏宁11.11:苏宁易购移动端的架构优化实践
查看>>
GitLab发布11.6版本,支持无服务器功能部署
查看>>
Elixir 1.3带来新的语言功能、API和改进后的工具
查看>>