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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj 1004: [HNOI2008]Cards

發布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj 1004: [HNOI2008]Cards 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/**************************************************************Problem: 1004User: lxy8584099Language: C++Result: AcceptedTime:264 msMemory:1896 kb ****************************************************************//*剛好在學polya 就送來一個例題。。。首先 那b啥定理的優化版polya不起作用因為規定了某一種顏色的數量所以使用dp背包計數? f(r,b,g) 表示 用r個紅 b個藍 g個綠 的方案數(我們用不了優化 只能把所有方案數算出來。。)注意 單位元(也就是不置換)也算一種置換 要算進去還有 背包技術和01背包類似。 是倒著for 不然就要記錄重復。。。 */ #include<cstdio> #include<cstring> using namespace std; const int N=65; int sr,sb,sg,n,m,p,cnt,ans; int a[N],size[N],f[N][N][N]; bool vis[N]; int ksm(int a,int b,int p) {int res=1;for(;b;b>>=1){if(b&1) (res*=a)%=p; (a*=a)%=p;} return res; } int getans() {memset(vis,0,sizeof(vis));memset(f,0,sizeof(f));memset(size,0,sizeof(size));f[0][0][0]=1;cnt=0;for(int i=1;i<=n;i++) if(!vis[i]){cnt++;? int x=i;while(!vis[x]) {size[cnt]++;vis[x]=1;x=a[x];} }for(int i=1;i<=cnt;i++)for(int r=sr;r>=0;r--)for(int b=sb;b>=0;b--)for(int g=sg;g>=0;g--){if(r>=size[i]) (f[r][b][g]+=f[r-size[i]][b][g])%=p;if(b>=size[i]) (f[r][b][g]+=f[r][b-size[i]][g])%=p;if(g>=size[i]) (f[r][b][g]+=f[r][b][g-size[i]])%=p;}return f[sr][sb][sg]; } int main() {scanf("%d%d%d%d%d",&sr,&sb,&sg,&m,&p);n=sr+sb+sg;for(int k=1;k<=m;k++){for(int i=1;i<=n;i++) scanf("%d",&a[i]);(ans+=getans())%=p;?? // 計算每組置換的貢獻 ????}for(int i=1;i<=n;i++) a[i]=i;(ans+=getans())%=p;???? // 單位元的計算? (ans*=ksm(m+1,p-2,p))%=p;printf("%d\n",ans%p);return 0; }

?

轉載于:https://www.cnblogs.com/lxy8584099/p/10139786.html

總結

以上是生活随笔為你收集整理的bzoj 1004: [HNOI2008]Cards的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。