dp定義真的神,
直接的想法是$f[x][maxn]$為第$x$個操作,狀態$maxn$,$maxn$1<<200,好像沒有暴力分高
實際上我們可以這樣定義$f[x][maxn][len][0/1]$表示後八位$maxn$,第九位0\1,第九位之後連續長度為$j$概率
為什麼這樣定義
實際上質因數分解後2的次數就是後面0的個數
+1會破壞已有的0,運算元最多只有200個全部+1後八位已經足夠
最多隻會影響到後九位一次
考慮一種極限情況
現在在最後一位加一會進製
1000000000000000,再怎麼+1都不會再影響到九位之後了
轉移比較簡單具體看**
1 #include2view codeusing
namespace
std;
3#define ll long long
4ll x,n,m,xx,opt,maxn,cnt;
5double p,ans=0;6
double f[210][288][310][2];7
ll cal(ll now)
12int
main()
38else jj=j,tt=t;
39 f[i][now][jj][tt]+=f[i-1][pre][j][t]*(1-p);
40 now=pre<<1;41
if(((now>>8)&1)==t) tt=t,jj=j+1
;
42else tt=t^1,jj=1
;43 now=now&maxn;
44 f[i][now][jj][tt]+=f[i-1][pre][j][t]*p;45}
46for(ll now=1;now<=maxn;now++)//
47for(ll j=1;j<=m;j++)
48for(ll t=0;t<=1;t++)
49if
(f[n][now][j][t])
50 ans+=f[n][now][j][t]*cal(now);
51//
,printf("f[%lld][%lld][%lld][%lld]=%lf\n",n,now,j,t,f[n][now][j][t]);
52//
printf("%.13lf\n",ans);
53for(ll j=1;j<=m;j++)
57 printf("
%.13lf\n
",ans);
58 }
bzoj 1076(狀壓dp)(期望dp)
傳送門 題解 dp i j 表示第i輪狀態為j 狀態中為1的位表示當前物品還沒被取走 的最大期望得分。為了防止從無效狀態轉移至有效狀態,採用倒推法,從已知的有效狀態往回推,具體注釋在 中。p.s.不寫memset可以快接近一倍,但是為了思維嚴密性,還是寫乙個,反正都能過 注意 由於吃過的寶物可以再吃...
抽卡 狀壓DP 期望DP 係數遞推
這題的從狀態定義上就有點特別,考場上沒想到怎麼設定狀態來限制1次克金中m次的抽取。只打了m 1的點,沒取模爆0了。加上是20分。我的狀態定義很簡單,但是這個題如果把每個物品拆成三個然後硬轉移狀態數太多,這樣的話一共有27個物品,顯然1e9就死了。那麼考慮為什麼要狀壓,其實是因為不同種物品概率不同,並...
CF678E(狀壓DP 期望)
4648.noip2016提高a組模擬7.17 錦標賽 problem n nn個人進行n 1 n 1n 1輪淘汰賽。已知i ii戰勝j jj勝率為ai,ja ai,j 求乙個排列使得1 11獲勝概率最大.n 18 n le 18 n 18 solution 首先考慮乙個暴力做法 如果已經知道了排列...