最近連考兩場期望dp的題目,sir說十分板子的題目我竟然一點也不會,而且講過以後也覺得很不可改。於是開個坑。
明明有\(o(mlog)\)的寫法,但是\(m\)等於\(500\)就讓人十分迷惑。當然我並沒有推出來
以下式子來自這裡
emm,目前覺得deepinc的式子最好理解,也最好寫 其實我就看懂了乙個
下面的\(m^k\)顯然是總方案數,後面乘的\((n-k+1)\)提醒我們這個式子是在列舉每乙個區間。
至於分子上的東西,
從\(1\)到\(m\)列舉當前區間造成貢獻的數是多少。
假設當前列舉到\(i\)
那麼方案數就是\(i^k-(i-1)^k\) ,前面是每個數值域在\([1,i]\)的方案數,後面是每個數值域在\([1,i-1]\)的方案數,相減就是這個區間內至少有乙個是\(i\)的方案數。
然後乘以對應的\(w[i]\),求個和。
實際意義大概就是這樣的。
那我為什麼交了折磨多次68分呢?
不會真的有人能看到m是500吧,不會吧不會吧不會吧
貌似是hdu 6848的弱化版?
這個題可以\(o(n^2)\)解決掉。原題貌似就要\(o(nlog)\)了,我不會。
首先,這類題目的乙個常用套路是,用每乙個元素對答案的貢獻,乘以每乙個元素的貢獻次數,求和再除以總方案數。
這個題裡面,首先可以發現,每條路徑出現的次數只與當前的點數和這條路徑第乙個點的位置有關。
所以我們用dp[i][j]表示,這條路徑中間有i對點,右面有j對點的方案數(不考慮左面的方案數,當作左面是0個)。
考慮轉移。
dp[i][j]=dp[i-1][j]*(i*2-1)+dp[i][j-1]*(j*2+1);
這裡我們相當與列舉下一次是哪個點進行碰撞。中間有i對點,除了最右面的,其他點都可以向左或向右。右面的j對點同理。
當然,有:
\(dp[0][0]=1\)
\(dp[0][i]=dp[0][i-1]*(i*2-1)*i!*2^i\)
\(dp[i][0]=dp[i-1][0]*(i*2-1)\)
這裡要說一下\(dp[0][i]\)和\(dp[i][0]\)轉移的區別。
\(dp[i][0]\):右面沒有點對。也就是說,我們選擇作出貢獻的點對必須在i對點碰撞完之後才能進行碰撞。
\(dp[0][i]\):中間沒有點對,也就是說,我們選擇作出貢獻的點對可以在i對點碰撞的過程中進行碰撞,所以要乘以\((i!*2^i)\)
然後我們就求出了方案數(左面的方案沒有乘)
現在只要列舉造成貢獻的路徑,再乘以對應的dp[i][j],再乘以左面的方案數,再求個和,最後除以總方案數,就完了!
具體實現:第一維列舉奇數點,第二維列舉偶數點。如果xy,就讓x=2n+1-x+1,y=2n+1-y,相當與讓整個序列反轉,這樣求方案數更加方便。
當然,如果這麼敲上去,大概會拿到90分的好成績,因為快速冪帶個log,就很煩。
只要預處理一下就行了。
**:
#include using namespace std;
typedef long long ll;
const int maxn=3000+10,maxm=6000+10,mod=998244353;
#define gc() (p1 == p2 ? (p2 = buf + fread(p1 = buf, 1, 1 << 20, stdin), p1 == p2 ? eof : *p1++) : *p1++)
#define read() ( while(c >= '0' && c <= '9') x = x * 10 + (c & 15), c = gc(); f * x; })
char buf[1 << 20], *p1, *p2;
int a[maxm];
ll dp[maxn][maxn];
ll fac[maxn],facn[maxn],n2[maxn];
int n;
ll ans;
ll qpow(ll x,int y)
return res;
}void solve()
for(register int i=1;i<=n;++i)
} for(register int i=2;i<=(n*2);i+=2)
} ans=ans*qpow(qpow(2,n)*fac[n]%mod,mod-2)%mod;
printf("%lld\n",ans);
}int main()
學習筆記 期望DP題單 概率,期望DP
目錄貳 典例營 做過很多期望的題了,但是一直沒有系統地學習過期望,這幾天終於有時間攻堅這個重要但是對我而言難得一匹的問題了.實際上我 dp 也菜得一匹。傳送門 to oi wiki 一般我們使用 p x 表示 x 發生的概率,e x 表示 x 發生的期望。我們有兩者的關係 e x sum p x i...
概率DP 期望雜題
1.f i j 前i個人,有j個人正常出局的概率 f i j f i 1 j p1 f i 1 j 1 p2 留下來 被日死 正常出局 p 別人出局後自己被日死的概率 p2 1 p j 1 p1 1 p1 f i k p2 前k個過後都沒有被日死 最後再 inv 1 n 這一輪出局概率 includ...
NOIP模擬題 期望DP 禮物
夏川的生日就要到了。作為夏川形式上的男朋友,季堂打算給夏川買一些生日禮物。商店裡一共有種禮物。夏川每得到一種禮物,就會獲得相應喜悅值wi 每種禮物的喜悅值不能重複獲得 每次,店員會按照一定的概率pi 或者不拿出禮物 將第i種禮物拿出來。季堂每次都會將店員拿出來的禮物買下來。眾所周知,白毛切開都是黑的...