Codeforces932E DP 組合數學

2021-08-15 15:55:42 字數 1366 閱讀 1810

其實比賽時就想的差不多了。我是從xk

x

k入手的,看到這個,我就想到:現在有

x x

種東西,放到

k' role="presentation" style="position: relative;">k

k個不同箱子裡的方案數。然後

k<=

5000

k

<=

5000

,考慮從

k k

入手,f[

i][j

]' role="presentation" style="position: relative;">f[i

][j]

f[i]

[j]表示到第

i i

個箱子,放了

j' role="presentation" style="position: relative;">j

j種東西的方案數,然後最後的答案就是∑m

in(n

,k)i

=1f[

k][i

]×2n

−i∑ i=

1min

(n,k

)f[k

][i]

×2n−

i。為什麼呢?舉個例子,比如k=

3 k=3

,n=4 n=4

,此時三個箱子放的分別是

112 112

,那麼選出的集合就有可能是、、

、,也就是只要至少含有

,那麼剩下的n−

i n−i

個選不選都無所謂,也就是2n

−i2 n−

i。

#include

using

namespace

std;

#define ll long long

#define pa pair

const

int mod=1e9+7;

const

int maxk=5010;

ll read()

while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();

return x*f;

}ll n,k;

ll pow(ll x,ll y)

int f[2][maxk];

int main()

ll ans=0;

for(int i=1;i<=min(n,k);i++)ans=(ans+f[now][i]*pow(2ll,n-i)%mod)%mod;

printf("%i64d",ans);

}

Codeforces 817B 模擬 組合數

題目不難理解,就是給你乙個序列,然後讓你找到三個數相乘的最小值,問這有多少種組合情況。明顯一道考組合數的題 思路不難想,但是坑點比較多。我們先sort排序,然後計算出,最小的有多少個,次小的有多少個,次次小的有多少個。坑點一,有四種情況 情況一 最小的個數mi n1 min 1 3,那麼ans c3...

codeforces 1194F 組合數學

傳送門 你有n個事件,你需要按照1 n的順序完成這些事件,每個事件需要 t i 的時間完成,你現在一共有t的時間去做這些事情,每做一件事情的時候,你有0.5的概率花費 t i 的時間完成他,也有0.5的概率花費 t i 1 的時間去完成他,如果在做這個事件的時候時間花完了,你就相當於沒有做成這個事件...

Codeforces 1312D 組合數學

題意 給你n n n和m m m,問滿足以下條件的數列的個數 思路 數列有且僅有一對相等的數,所以每次要從m個數中挑n 1個數,既是組合數cn 1m。當找到n 1個數的時候,要滿足先嚴格遞增後嚴格遞減,嚴格遞增或嚴格遞減,所以最大值要確定在中間,我們只需要確定最大值兩邊的數即可,因為要存在一對相等的...