日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[HAOI2011]Problem c

發(fā)布時(shí)間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [HAOI2011]Problem c 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鏈接 P2523 [HAOI2011]Problem c

  • 想法還是很巧妙的。
  • 其實(shí)只是問(wèn)一個(gè)先后順序,因?yàn)榫幪?hào)相同的話(huà),那么\(id\)小的就在前面,\(id\)大的就在后面。
  • 所以我們考慮的是到底有哪一些人拿到的是相同的編號(hào)。
  • 先考慮無(wú)解的情況,也就是如果編號(hào)\(≥i\)的人放不下了。
  • 其他的情況都是有解的。
  • 其實(shí)我們不需要關(guān)心那一些有人的地方,也就是我們現(xiàn)在可以把已經(jīng)有人的地方扣出來(lái),把確定的了位置的人也扣除來(lái)。
  • 現(xiàn)在問(wèn)題變成了有\(n-m\)個(gè)人,沒(méi)有人確定位置的問(wèn)題了。
  • 考慮\(f_{i,j}\)表示考慮了編號(hào)為\(i\)\(n\)給誰(shuí),已經(jīng)確定了\(j\)個(gè)人拿到的編號(hào)。
  • 那么有\[f_{i,j}=∑f_{i+1,j-k}×C_{j}^{k}\ (0≤j≤p_i)\]
  • 其中\(p_i\)表示編號(hào)大于\(i\)可以確定的人數(shù)。
  • 這里的含義就是考慮在\(j\)個(gè)人中取出了\(k\)個(gè)人作為編號(hào)\(i\),因?yàn)槿擞芯幪?hào),所以組合數(shù)一下。
  • 答案\(f_{n-m,0}\)
// luogu-judger-enable-o2 #include<bits/stdc++.h> #define R register int using namespace std; const int N=400; int n,m,t,u,v,mod,Q[N],s[N],C[N][N],f[N][N]; void add(R &x,R y){x=(x+y>=mod?x+y-mod:x+y);} void sol(){scanf("%d %d %d",&n,&m,&mod);memset(f,0,sizeof(f));memset(C,0,sizeof(C));memset(s,0,sizeof(s));for(R i=0;i<=n;++i)C[i][0]=1,s[i]=0;for(R i=1;i<=n;++i)for(R j=1;j<=i;++j)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;for(R i=n;i>=1;--i)s[i]=s[i+1]+1;for(R i=1;i<=m;++i){scanf("%d %d",&u,&v);for(R j=1;j<=v;++j){s[j]--;if(s[j]<0){puts("NO");return;}}}f[n+1][0]=1;for(R i=n;i>=1;--i)for(R j=0;j<=s[i];++j)for(R k=0;k<=j;++k)f[i][j]=(f[i][j]+1ll*f[i+1][j-k]*C[j][k]%mod)%mod;printf("YES %d\n",f[1][n-m]); } int main(){cin>>t;while(t--)sol();return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/Tyher/p/9833520.html

總結(jié)

以上是生活随笔為你收集整理的[HAOI2011]Problem c的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。