HDU 5194 DZY Loves Balls(期望可加性)
2015-04-14 15:23
274 查看
加深对期望的理解:
这个题目真的需要对期望有很深的理解才可以.计算所有出现的期望,其实也就是计算每个位置上单个出现的期望.
而我之前固化的思维是求出各种出现情况后再判断出现的次数Yes
题意:
有n个黑球m个白球,随意一个一个取出,取出黑球代表1,否则代表0,最后成为一个由1、0组成的序列。列举所有可能情况,然后求所有情况中有多少个01序列。假设有共有x个01序列,y种情况,最后输出x/y(最简形式)。
解析:
1.
找规律
这题最好的方法就是找出题目的规律,即第i(1<=i<n+m)个位置上出现0,第i+1个位置上出现1的概率是 m/(n+m) * n/(n+m-1) .
因为要求‘01’串在S串中出现的位置,即满足这个条件,但是'0'不可以在末尾,'1'不可以在开头.对于前面n+m-1个位置都可以为0.
第i+1个位置上出现1的概率是:(出现黑球(出现1)的概率)*(出现在第i个位置上的概率)。
但是一共有n+m-1个位置上可以出现1,所以便是所有位置上的概率想加.
等价于= m/(n+m) * n/(n+m-1) * (n+m-1) = n*m/(n+m).
2.
组合数方法
ans = 01出现的次数除以总的串情况
总的串情况=C(n,n+m),对于01串,可能出现1.....min(n,m)次.那么可以从中选择C(i,m)个位置,在这些0位置后面放入1即可,剩下了n-i个1则仍然随意放在这些位置后面,因为
这些随便放对于01串并没有影响. 01出现的次数 = ∑i=0,min(n,m) C(i,n)*C(i,m)*i;
3.
dp
dp
[m][state] 最优一位表状态 0表示0结尾 ,1表示1结尾, 2表示0结尾的01串数. 3表示1结尾的01串数
这个题目真的需要对期望有很深的理解才可以.计算所有出现的期望,其实也就是计算每个位置上单个出现的期望.
而我之前固化的思维是求出各种出现情况后再判断出现的次数Yes
题意:
有n个黑球m个白球,随意一个一个取出,取出黑球代表1,否则代表0,最后成为一个由1、0组成的序列。列举所有可能情况,然后求所有情况中有多少个01序列。假设有共有x个01序列,y种情况,最后输出x/y(最简形式)。
解析:
1.
找规律
这题最好的方法就是找出题目的规律,即第i(1<=i<n+m)个位置上出现0,第i+1个位置上出现1的概率是 m/(n+m) * n/(n+m-1) .
因为要求‘01’串在S串中出现的位置,即满足这个条件,但是'0'不可以在末尾,'1'不可以在开头.对于前面n+m-1个位置都可以为0.
第i+1个位置上出现1的概率是:(出现黑球(出现1)的概率)*(出现在第i个位置上的概率)。
但是一共有n+m-1个位置上可以出现1,所以便是所有位置上的概率想加.
等价于= m/(n+m) * n/(n+m-1) * (n+m-1) = n*m/(n+m).
2.
组合数方法
ans = 01出现的次数除以总的串情况
总的串情况=C(n,n+m),对于01串,可能出现1.....min(n,m)次.那么可以从中选择C(i,m)个位置,在这些0位置后面放入1即可,剩下了n-i个1则仍然随意放在这些位置后面,因为
这些随便放对于01串并没有影响. 01出现的次数 = ∑i=0,min(n,m) C(i,n)*C(i,m)*i;
3.
dp
dp
[m][state] 最优一位表状态 0表示0结尾 ,1表示1结尾, 2表示0结尾的01串数. 3表示1结尾的01串数
import java.util.Scanner; public class Test { public static int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } public static int C(int n,int m){ int ans = 1; for(int i = 0;i<n;i++){ ans = ans*(m-i)/(i+1); } return ans; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); while(in.hasNext()){ int n = in.nextInt(); int m = in.nextInt(); // ans = m/(n+m)*n/(n+m-1)*(n+m-1) System.out.println(m*n/gcd(m*n,m+n) + "/" + (m+n)/gcd(m*n,m+n));//method 1 int cnt = 0,tot = C(n,m+n); for(int i = 1;i<=Math.min(m, n);i++){ cnt += C(i,m) * C(i,n) * i; } System.out.println(cnt/gcd(cnt,tot) + "/" + tot/gcd(cnt,tot));//method 2 //dp 最优一位表状态 0表示0 1表示1 2表示0结尾的01串数 3表示1结尾的01串数 //这个如果设置成前两位为XX的,就需要累加来计算了 int [][][] dp = new int [15][15][4]; for(int i = 0;i<=Math.max(n, m);i++) dp[i][0][1] = dp[0][i][0] = 1; for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++){ dp[i][j][0] = dp[i][j-1][0] + dp[i][j-1][1]; dp[i][j][1] = dp[i-1][j][0] + dp[i-1][j][1]; dp[i][j][2] = dp[i][j-1][2] + dp[i][j-1][3]; dp[i][j][3] = dp[i-1][j][0] + dp[i-1][j][3] + dp[i-1][j][2];//这个顺便统计和 } cnt = dp [m][2] + dp [m][3]; System.out.println(cnt/gcd(cnt,tot) + "/" + tot/gcd(cnt,tot));//method 3 } } }
相关文章推荐
- hdu 5194 DZY Loves Balls(暴力,数学期望)
- hdu 5194 DZY Loves Balls (dp)
- 【CUGBACM15级BC第35场 A】hdu 5194 DZY Loves Balls
- HDU 5194 DZY Loves Balls (组合数学)
- hdu 5194 DZY Loves Balls
- HDU 5194 DZY Loves Balls(概率)
- hdu 5194 DZY Loves Balls【bfs+打表】
- HDU 5194 DZY Loves Balls(排列组合瞎搞 )
- HDU-5194-DZY Loves Balls(BestCoder Round # 35 )
- HDU 5194 DZY Loves Balls(数学组合or各种乱搞)
- HDU 5194 DZY Loves Balls
- HDU 5194 DZY Loves Balls
- HDU 5194——DZY Loves Balls
- hdu 5645 DZY Loves Balls 概率
- HDU5645——DZY Loves Balls
- HDOJ-5194-DZY Loves Balls 解题报告
- hdu DZY Loves Balls
- HDU 5645 DZY Loves Balls
- HDU 5645 DZY Loves Balls
- HUD 5194--DZY Loves Balls【规律】