HDU 4326 Game(概率DP 高斯消元)

2021-07-06 03:16:05 字數 1462 閱讀 3862



題意:就是現在有n個人標號從1到n排隊, 每次隊首的4個人開始遊戲, 4個人中每個人勝利的可能性是相等的, 現在勝利的人會留在隊首, 繼續遊戲, 輸的人會回到隊尾(回到隊尾的順序與進入遊戲idea順序一致, 比如說1,2,3,4比賽, 2獲勝, 則2留在隊首, 1,3,4在隊尾的順序依舊是1,3,4(4在最後)現在如果某個人連續贏了m局遊戲, 那個人就是最終得獲勝者, 問長度為n的隊伍當中, 初始位置在第k個的人獲勝的概率 (k <= n <= 10, m <= 10)。

思路:這題不難想到是概率dp,但是狀態轉移方程比較難想。

用dp[i][j]表示第乙個人已經連贏了i局第j個人獲勝(連贏m局)的概率,

那麼就可以得出乙個分類討論後的的狀態轉移方程

i=m時,dp[m][1]=1, dp[m][j]=0, j!=1

j=1時,dp[i][j]=1/4*dp[i+1][j]+3/4*dp[1][n-2]  

j=2時,dp[i][j]=1/4*dp[i+1][n-2]+1/4*dp[1][j-1]+2/4*dp[1][n-1]

j=3時,dp[i][j]=1/4*dp[i+1][n-1]+1/4*dp[1][n-1]+1/4*dp[1][1]+1/4*dp[1][n]

j=4時,dp[i][j]=1/4*dp[i+1][n]+2/4*dp[1][n]+1/4*dp[1][1];

j>4時,dp[i][j]=1/4*dp[i+1][j-3]+3/4*dp[1][j-3]  

然後就得到了乙個n*(m+1)個變數的方程組,然後用高斯消元求解方程組即可。

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-9

#define ll long long

#define pii pair//#pragma comment(linker, "/stack:1024000000,1024000000")

using namespace std;

const int maxn = 120;

double a[maxn][maxn], x[maxn];//方程的左邊的矩陣和等式右邊的值,求解之後x存的就是結果,行列編號從0開始

int equ,var;//方程數和未知數個數

int gauss()

else

} // for(int i = 0; i < 10; i++) cout << a[4][i] << endl;

gauss();

//for(int i = 0; i < n; i++) cout << x[i] << endl;

printf("case #%d: %.6f\n", ++kase, x[k-1]);

} return 0;

}

hdu4035 樹上概率dp

從葉子到根,帶入公式求引數 kuangbin hdu 4035 dp求期望的題。題意 有n個房間,由n 1條隧道連通起來,實際上就形成了一棵樹,從結點1出發,開始走,在每個結點i都有3種可能 1.被殺死,回到結點1處 概率為ki 2.找到出口,走出迷宮 概率為ei 3.和該點相連有m條邊,隨機走一條...

hdu 3853 概率dp入門

題意 在一塊r c的棋盤上,從位置 1,1 的地方走到位置為 r,c 的地方,每走一步的代價為2,在位置 i,j 可能會走到位置 i 1,j i,j 1 以及 i,j 題目中給出每個點走向下乙個方向的概率,求花的總代價。分析 一道很基礎的概率dp,dp i j 表示的是從位置 i,j 走到 r,c ...

hdu4336(壯壓DP 概率DP)

需要集齊n張卡片,每買一包零食,裡面可能有不同的卡片,存在每種卡片的概率已知,每包零食最多有一張卡片。問集齊n張的期望。dp i 表示i這個狀態下還需要多少包的期望,dp 1 一開始不會寫,看了別的狀態轉移方程 dp i sum dp i 1 如果想得到一張卡片,期望就是 1 va k 上面的方程和...