资讯动态

Atcoder Cookie Distribution 题解

发布时间:2026/10/5 1:57:03 来源:尧图企业网站定制
思路幸福度期望值乘上总共的分配方案数就是所有情况下得到的幸福度的总和。cic_ici​之积表示第iii个人从他拥有的cic_ici​个饼干中选出一个总共有几种选法可能两次每个人选出的饼干拿到的天数都一样但是其他饼干分法不同也是不一样的因为在大的题面中只要有人拿到他的饼干的天数和上次不一样就算是不同的情况等同于先确定每个人选出的代表饼干是哪天的再把每天剩下的饼干分配给其他人的方案数。为什么代表饼干一定是nnn块如果有人没有选出代表饼干那么就证明他一块饼干都没有ci0c_i0ci​0这种情况下幸福度是000。设dpi,jdp_{i,j}dpi,j​表示到了第iii天已经有jjj个人获得自己选中的饼干的方案数。最后答案就是dpk,ndp_{k,n}dpk,n​。考虑从dpi,jdp_{i,j}dpi,j​向下一个dpdpdp状态转移。设第i1i1i1天有xi1x_{i1}xi1​个人拿到了他选中的饼干一天之内饼干没有区别比如今天发了333个饼干你拿到第一个和拿到第二个没有区别因为题面中说了算的是组合数一天之内只有你拿到了或者你没有拿到两种情况。选出之前没拿过自己选中的代表饼干的xi1x_{i1}xi1​个人今天拿代表饼干方案数就是从n−jn-jn−j个人中选xi1x_{i1}xi1​个人其他的ai1−xi1a_{i1}-x_{i1}ai1​−xi1​个饼干随机分给剩下的n−xi1n-x_{i1}n−xi1​个人方案数就是从n−xi1n-x_{i1}n−xi1​个人中选出ai1−xi1a_{i1}-x_{i1}ai1​−xi1​个领糖。所以只需要枚举这天的新增数pppxi1x_{i1}xi1​dp[i1][jp]dp[i][j]*C(a[i1]-p,n-p)*C(p,n-j)。C(a,b)表示b中选a个代码#includebits/stdc.husingnamespacestd;#definemod1000000007intn,k,a[25];longlongC[1005][1005],dp[25][1005];intmain(){cinnk;for(inti1;ik;i)cina[i];C[0][0]1;for(inti0;in;i)for(intj1;jn;j){if(i0)C[i][j]C[i-1][j-1];C[i][j](C[i][j]C[i][j-1])%mod;}dp[0][0]1;for(inti0;ik;i)for(intj0;jn;j)for(intp0;pjnpa[i1];p)dp[i1][jp](dp[i1][jp]dp[i][j]*C[a[i1]-p][n-p]%mod*C[p][n-j]%mod)%mod;coutdp[k][n]endl;return0;}

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑