今天又考炸了,只有100pt,感覺人生無望了。。。
T1
第一題又來期望,哎,這次終於調對了期望dp,高高興興地拿了50pt,可是發現正解比我這個記憶化還好寫些。。。,真是腦袋短路,以後要記得概率和期望是一對好基友,當求期望的複雜度很高的時候,我們要想到用概率來求期望,可能達到預想不到的效果。
貼一下50pt的代碼和100分的概率dp
LL dfs(int x,bool wh,int res)
{
//cout<<x<<" "<<wh<<" "<<p<<" "<<sum<<" "<<res<<endl;
if(x > n)return 0;
if(!res)wh=1;
if(dp[x][res][wh])return dp[x][res][wh];
LL Ans = 0;
if(wh)
{
LL p = (1 + mod - P)%mod;
(Ans += ((dfs(x+1,wh,0)%mod + A))%mod*p%mod)%=mod;
(Ans += ((dfs(x+1,wh^1,m)%mod + A)%mod*P%mod)%mod)%=mod;
}
else if(!wh)
{
LL p = (1 + mod - D)%mod;
(Ans += ((dfs(x+1,wh,res-1)%mod + B)%mod*p)%mod)%=mod;
(Ans += ((dfs(x+1,wh,res-1)%mod + C)%mod*D)%mod)%=mod;
}
return dp[x][res][wh] = Ans;
}
LL R=((B*(1-D)+C*D)%mod+mod)%mod;
f[0] = 1;
REP(i,1,m) f[i] = (LL)(f[i-1]*(1-P)%mod+mod)%mod;
REP(i,m+1,n) f[i] = (((LL)f[i-1]*(1-P)+(LL)f[i-m-1]*P)%mod+mod)%mod;
LL ans = 0;
REP(i,1,n)
{
f[i] = (f[i] + mod) % mod;
ans = (ans + (LL)f[i]*A+(LL)(1-f[i])*R)%mod;
}
T2
好像是一道比較難的題目,只打了30pt的爆搜,還掉了10分,忘記跟0取max了。
T3
貌似轉換一下就是個二維數點?補充個東西,還不錯,問離這個數最近的比這個數大的數,建立權值線段樹,權值的位置插入下標查詢最大值就好了。
經驗與不足
記得看清題目與0取max,記得概率與期望的關係!!!