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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

codechef LEMOVIE dp

發(fā)布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codechef LEMOVIE dp 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:

https://www.codechef.com/problems/LEMOVIE

對于這種類似排列,并且有大小關系的貢獻,一般要按從大到小或從小到大插入進行討論

一組數(shù)有貢獻當且僅當至少一個數(shù)被插到了最前面,那么就分情況進行討論即可

就是插板法,把y個數(shù)插到x個數(shù)當中,把x個數(shù)之間的空隙看成盒子

因為是排列,所以插完以后還要乘一下階乘

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<cmath> using namespace std; typedef long long ll;const int maxn = 210; const int mod = 1e9+7;int T,n,m,q; int a[maxn],b[maxn],c[maxn]; int f[maxn][maxn]; int C[1010][1010],jc[1010];bool cmp(int a,int b){return a>b; }ll read(){ ll s=0,f=1; char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0' && ch<='9'){ s=s*10+ch-'0'; ch=getchar(); } return s*f;}int main(){T=read();jc[0]=1;for(int i=1;i<=1000;i++) jc[i]=1ll*jc[i-1]*i%mod;C[0][0]=1;for(int i=1;i<=1000;i++){C[i][0]=C[i][i]=1;for(int j=1;j<i;j++){C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;}} while(T--){q=0;memset(f,0,sizeof(f)); n=read(),m=read();for(int i=1;i<=n;i++) a[i]=read();sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){if(a[i]!=a[i-1]){b[++q]=a[i];c[q]=1;}else{++c[q];}}f[0][0]=1; int cnt=0;for(int i=1;i<=q;i++){for(int j=1;j<=m;j++){f[i][j]=(1ll*f[i-1][j]*jc[c[i]]%mod*C[c[i]+cnt-1][cnt-1]%mod+1ll*f[i-1][j-1]*jc[c[i]]%mod*C[c[i]+cnt-1][cnt]%mod)%mod;}cnt+=c[i];}int ans=0;for(int i=1;i<=m;i++) ans=(ans+f[q][i])%mod;printf("%d\n",ans);}return 0; }

?

轉載于:https://www.cnblogs.com/tuchen/p/10439705.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的codechef LEMOVIE dp的全部內容,希望文章能夠幫你解決所遇到的問題。

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