tyvj P4879 骰子遊戲

2022-06-03 04:51:12 字數 1073 閱讀 3853

首先,投乙個骰子,每個數字出現的概率都是一樣的。也就是不算小a的話,n個人投出x個骰子需要的次數和點數無關。

計數問題考慮dp,令f(i,j)為前i個人投j個同點數的骰子的方案數,容易得f(i,j)=sum.

邊界是f(1,j),具體是什麼值呢?乙個人投m個骰子,會得到6種點數,其中一種有j個,其他的五種有m-j個。也就是把m-j個骰子分成5份的方案數。

用插板法可得f(1,j)=c(m-j+4,4)=(m-j+1)(m-j+2)(m-j+3)(m-j+4)/24.

然後好像說這玩意需要用fft優化才能a,真成noi plus模擬賽了……

#include #include 

#define maxn 405

using

namespace

std;

typedef unsigned

long

long

ullint;

const ullint c = 998244353

;int

n, m, x, y;

ullint dp[maxn][maxn *maxn];

intmain()

for (int j = 0; j <= m; j++)

dp[1][j] = (m - j + 1) % c * (m - j + 2) % c * (m - j + 3) % c * (m - j + 4) % c * 291154603 %c;

for (int i = 2; i <= n; i++)

for (int j = 0; j <= i * m; j++)

for (int k = 0; k <= min(j, m); k++)

dp[i][j] = (dp[i][j] + dp[i - 1][j - k] * dp[1][k] % c) %c;

ullint ans = 0

;

for (int j = x - cnt; j <= n * m; j++)

ans = (ans + dp[n][j]) %c;

cout

}

擲骰子遊戲

遊戲者每次投擲兩顆骨子,每個骰子是乙個正方體,當骰子停止時,將每個骰子朝上的點數相加,在第一次投擲骰子時,如果所得到的和為7或11,那麼遊戲者為勝 所得和為2 3或12則輸 如和為4 5 6 8 9或 10,則此和為遊戲者點數。如要想贏得勝利,必須繼續投擲骰子,直到取和得自己的點數 也即規則2的點數...

擲骰子遊戲

寫乙個搖骰子遊戲,要求使用者壓大小,賠率一賠一。要求 三個骰子,每個骰子的值從1 6,搖大小,每次列印搖出來3個骰子的值。import random defroll dice count 0 point 定義乙個空的點數變數儲存每次搖骰子獲得的數字 while count 3 num random....

擲骰子遊戲

編寫程式模擬擲骰子遊戲。已知擲骰子遊戲的遊戲規則為 每個骰子有6面,這些面包含1 2 3 4 5 6六個點,投兩枚骰子之後,計算點數之和。如果第一次投的點數和為7或11,則遊戲者獲勝 如果第一次投的點數和為2 3或12,則遊戲者輸 如果第一次投的點數和為4 5 6 8 9或10,則將這個和作為遊戲者...