Zoj 3380 Patchouli's Spell Cards (概率dp)

题目大意:

用(1 2 3 ... n) n个数填充 m个位置,问最少相同的数字出现的数量不少于I 的概率

思路分析:

逆向思考,求铺满最多的数量不够I 个的方案数。

每次用一个数字去铺,铺M个位置,每个数字最多铺 不够I个。

dp[i][j]表示枚举到了第i个数字,前i个数字铺了j个位置的方案数。

考虑到组合计数

用Java

import java.util.*;
import java.io.BufferedInputStream;
import java.math.*;

public class Main{
	static BigInteger [][] C = new BigInteger[110][110];
	static BigInteger [][] dp = new BigInteger[110][110];
	public static void main(String args[]){

		Scanner cin = new Scanner(new BufferedInputStream(System.in));

		for(int i=0;i<105;i++){
			C[i][0]=C[i][i]=BigInteger.ONE;
			for(int j=1;j<i;j++){
				C[i][j] = C[i-1][j-1].add(C[i-1][j]);
			}
		}

		int n,m,l;

		while(cin.hasNext()){
			m = cin.nextInt();
			n = cin.nextInt();
			l = cin.nextInt();

			BigInteger total = BigInteger.valueOf(n).pow(m);

			if(m<l){
				System.out.println("mukyu~");
				continue;
			}
			else if(l>m/2){
				BigInteger ans = BigInteger.ZERO;
				for(int i=l;i<=m;i++){
					ans = ans.add(C[m][i].multiply(BigInteger.valueOf(n-1).pow(m-i)));
				}
				ans = ans.multiply(BigInteger.valueOf(n));
				BigInteger gcd = ans.gcd(total);
				System.out.println(ans.divide(gcd)+"/"+total.divide(gcd));
			}
			else {
				for(int i=0;i<=n;i++){
					for(int j=0;j<=m;j++)
						dp[i][j] = BigInteger.ZERO;
				}

				dp[0][0] = BigInteger.ONE;
				for(int i=1;i<=n;i++){
					for(int j=1;j<=m;j++){

						for(int k=0;k<=j&&k<l;k++){
							dp[i][j] = dp[i][j].add(dp[i-1][j-k].multiply(C[m-(j-k)][k]));
						}
					}
				}
				BigInteger ans = BigInteger.ZERO;
				for(int i=1;i<=n;i++){
					ans = ans.add(dp[i][m]);
				}
				ans = total.subtract(ans);
				BigInteger gcd = ans.gcd(total);
				System.out.println(ans.divide(gcd)+"/"+total.divide(gcd));
			}
		}
	}
}

Zoj 3380 Patchouli's Spell Cards (概率dp)

时间: 2024-11-07 13:07:09

Zoj 3380 Patchouli's Spell Cards (概率dp)的相关文章

【概率DP】 ZOJ 3380 Patchouli&#39;s Spell Cards

通道 题意:有m个位置,每个位置填入一个数,数的范围是1~n,问至少有L个位置的数一样的概率 思路: 总数是n^m,我们求没有L个位置一样的数的概率 * 设 dp[i][j]表示用前i个数,填充j个位置的方案数(要符合没有L个位置是一样的数) * dp[i][j]=dp[i-1][j]+Sigm( dp[i-1][j-k]*C[m-(j-k)][k] ) k<=j&&k<L * 其实就是看第i个数,可以不填,填一个位置,两个位置······这样累加过来. * 那么最后的答案就是

【ZOJ】3380 Patchouli&#39;s Spell Cards

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3957 题意:m个位置,每个位置填1~n的数,求至少有L个位置的数一样的概率(1<=n,m,l<=100) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct inum { static const int N=205,

ZOJ3380- Patchouli&#39;s Spell Cards(概率DP+计数)

Patchouli's Spell Cards Time Limit: 7 Seconds      Memory Limit: 65536 KB Patchouli Knowledge, the unmoving great library, is a magician who has settled down in the Scarlet Devil Mansion (紅魔館). Her specialty is elemental magic employing the seven ele

UVALive 6672 Bonus Cards 概率dp

题意呢 就是有两种售票方式 一种是icpc 一种是其他方式 icpc抢票成功的概率是其他方式的2倍…… 这时 一个人出现了 他通过内幕知道了两种抢票方式各有多少人 他想知道自己如果用icpc抢票成功的概率是多少 用acm抢票成功的概率是多少…… 做过不多的概率dp 还在摸索…… dp[i][j]代表第i轮有j个icpc的人已经有票了…… 当然同时i-j个通过其他方式抢票的人也有票了 这就是用同样的函数搜两次的原理…… 优化一次i<=a 一次是把初始化放到for里…… 第一次见这么卡时间的题……

LightOJ1364---Expected Cards(概率dp+三进制状压)

Taha has got a standard deck of cards with him. In addition to the 52 regular ones, there are 2 joker cards. Every regular card has a rank and a suit. The ranks in ascending order are: A, 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q and K. The suit of a card can

ZOJ 3329 One Person Game 【概率DP,求期望】

题意:有三个骰子,分别有k1,k2,k3个面. 每次掷骰子,如果三个面分别为a,b,c则分数置0,否则加上三个骰子的分数之和. 当分数大于n时结束.求游戏的期望步数.初始分数为0 设dp[i]表示达到i分时到达目标状态(即i = n)的期望,pk为投掷k分的概率, p0为回到0的概率则dp[i] = ∑(pk * dp[i + k]) + dp[0] * p0 + 1 ; 都和dp[0]有关系,而且dp[0]就是我们所求,为常数设 dp[i] = A[i] * dp[0] + B[i]; 即为d

ZOJ 3329:One Person Game 概率DP求期望(有环)

One Person Game 题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题意: 玩一个掷骰子的游戏,同时掷三个筛子,每次掷筛子都会得到分数(三个筛子掷得的数的合),规则如下:   初始分数为0,如果一号骰子掷得a且二号骰子掷得b,同时三号筛子掷得c,则分数归零 当分数大于n时游戏结束 求直到游戏结束掷骰子的次数的期望 题解: 设E[i]为初始分数为0时所求的期望,则E[n+1]=0,E[0]即所求

ZOJ 2949 Coins of Luck(概率dp求期望)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1948 Luck is the key to life. When I have to decide something, I will make my decision by flipping a coin. And then, I have two things to do. First, I have the decision made. Second, I g

ZOJ 3640 Help Me Escape(概率dp+记忆化)

Background     If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at the door. And unto thee shall be his desire, and thou shalt rule over him. And Cain talked with Abel his brother: and it came to pass, when they w