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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JZOJ 5192. 【NOI2017模拟7.2】容器

發(fā)布時(shí)間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5192. 【NOI2017模拟7.2】容器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

Input

Output

Sample Input

樣例一:3 2 1
樣例二:15 6 4

Sample Output

樣例一:10
樣例二:458177764

Data Constraint

Hint

樣例一解釋:

Solution

  • 對于這種求方案數(shù)的問題,我們考慮DP。

  • 我們考慮逐個(gè)位置填區(qū)間,比如說做到了第 ii 個(gè)容器。

  • 那么在填了的區(qū)間(設(shè)共有 jj 個(gè))中,肯定有些已經(jīng)閉合了,有些尚未閉合(設(shè)為 kk 個(gè))。

  • 那么我們就得到了狀態(tài) f[i][j][k]f[i][j][k] 表示此時(shí)的方案數(shù),顯然 f[0][0][0]=1f[0][0][0]=1 。

  • 如何轉(zhuǎn)移呢?我們想想這時(shí)我們可以做什么,閉合某些尚未閉合的區(qū)間,開啟新的未閉合的區(qū)間。

  • 于是我們枚舉兩個(gè)值 dec,incdec,inc 分別表示此時(shí)閉合區(qū)間的數(shù)量和將要開啟新區(qū)間的數(shù)量。

  • 由于這 KK 個(gè)區(qū)間是互不相同的,我們要需要處理出其順序帶來的方案數(shù)。

  • 那么顯然有轉(zhuǎn)移式:f[i][j][k]?Cdeck?Cincj+inc=>f[i+1][j+inc][k?dec+inc]f[i][j][k]?Ckdec?Cj+incinc=>f[i+1][j+inc][k?dec+inc]

  • 其中 CdeckCkdec 表示在 kk 個(gè)未閉合的區(qū)間中選擇 decdec 來閉合增加的組合方案。

  • Cincj+incCj+incinc 表示新增的 incinc 個(gè)區(qū)間在總共的 j+incj+inc 個(gè)區(qū)間中的排列順序增加的組合方案。

  • 而每個(gè)容器的容量為 TT 的限制就相當(dāng)于在任意時(shí)刻未閉合的區(qū)間數(shù)量不超過 TT 。

  • 答案即為 f[n+1][k][0]f[n+1][k][0] 。

  • 時(shí)間復(fù)雜度 O(NK4)O(NK4) 。

Code

#include<cstdio> #include<cctype> using namespace std; typedef long long LL; const int N=45,mo=1011110011; int n,k,T; int f[N][N][N],c[N][N]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } int main() {freopen("container.in","r",stdin);freopen("container.out","w",stdout);n=read(),k=read(),T=read();for(int i=0;i<N;i++) c[i][0]=1;for(int i=1;i<N;i++)for(int j=1;j<=i;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mo;f[0][0][0]=1;for(int i=0;i<=n;i++)for(int j=0;j<=k;j++)for(int l=0;l<=j && l<=T;l++)if(f[i][j][l])for(int inc=0;j+inc<=k;inc++)for(int dec=0;dec<=l;dec++)if(l-dec+inc<=T)f[i+1][j+inc][l-dec+inc]=(f[i+1][j+inc][l-dec+inc]+(LL)f[i][j][l]*c[l][dec]%mo*c[j+inc][inc]%mo)%mo;printf("%d",f[n+1][k][0]);return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 5192. 【NOI2017模拟7.2】容器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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