jzoj3424 NOIP2013模擬 粉刷匠

2021-09-25 18:59:56 字數 2493 閱讀 4779

description

input

第一行乙個正整數t,表示測試資料組數

對於每一組測試資料資料:

第1行:乙個正整數k

第2行:k個正整數,表示第i桶油漆可以粉刷的石柱個數,ci。

output

對於每組輸入資料,輸出一行乙個整數,表示粉刷的方案數mod 1000000007。

sample input33

1 2 3

52 2 2 2 2

101 1 2 2 3 3 4 4 5 5

sample output

1039480

85937576

data constraint

30% n≤10, t≤5

50% n≤15, t≤5

80% k≤15,ci≤5,t≤500

100% k≤15,ci≤6,t≤2000

題解題外話

話說這道題我在中考前幾天還看到過。

當時沒什麼想法,就沒有想下去。

今天一看到,突然靈機一動,發現是挺簡單的一道題。

調了好久,過了樣例,交上去,結果tle50.

為什麼呢?因為我比賽時把f陣列開成了30000*100.

然後2000每次memset一下,成功**。

考慮dp(話說暴力都不好拿分)

我們按照每一種顏料依次來弄。

那麼加入一種顏料時,只需要考慮當前顏料與已經弄完的顏料的相對位置,不需要考慮染在哪根柱子上。

意思就是,假如當前顏料是:ababbd

加入3個c種顏料一種方式是:cacbabcbd

那麼我們設f[i

]f_

f[i]

​表示當前把前i 種顏料的序列做出來的方案數。

可是一維的不夠。因為題目要求是同種顏色不可以相鄰。

於是我們多加一維表示當前一共有j個位置滿足前面的顏色與當前顏色相同。

轉移就有點神奇了。

每次轉移其實就相當於把k個新顏色的球插入原序列中。

插入有方法——

每次插入有可能插入到兩個相同的球之間,也可能插入到兩個不相同的球之間。

所以,設有p個球插入到兩個相同的球之間,有q個球插入到了兩個不相同的球之間。

答案分別是:cjp

∗csu

m−j+

1q

c_j^p*c_^q

cjp​∗c

sum−

j+1q

​但是還可能有別的球跟在上面兩種球後面。

這就相當於在m個不相同的盒子裡放入n個相同的球的方案數。

方案數即為cn+

m−1n

c_^cn

+m−1

n​(利用插板原理)

答案即為ck−

1k−p

−q

c_^ck

−1k−

p−q​

標程

#include

#include

#include

#include

using

namespace std;

int maxn=

32768

,mo=

1000000007

;int n,t;

int k[16]

;long

long f[

100]

[100

],mi[16]

,c[100][

100]

,sum[

32768

],len[

32768];

long

long

qsm(

long

long a,

long

long b)

return t;

}int

main()

} mi[0]

=1;for

(int i=

1;i<=

15;i++

)scanf

("%d"

,&t)

;while

(t>0)

memset

(f,0

,sizeof

(f))

;memset

(sum,0,

sizeof

(sum));

memset

(len,0,

sizeof

(len));

f[0]

[0]=

1;for(

int i=

1;i<=n;i++

)else}}

}}sum[i]

=sum[i-1]

+k[i]

; len[i]

=len[i-1]

+1;}

}printf

("%lld\n"

,(f[n][0

])%mo);}

}

2014 9 8 noip201x模擬賽總結與展望

因為本星期學校組織考試,所以到現在才能抽出時間寫寫總結。300分滿分,得了200,q1 q3a了,q2爆了零分,下面一題題的總結吧。q1 最裸的貪心,因為心理原因還有點不敢寫,抱著爆零的心態寫了,沒想到a掉了。主要就是需要把rp從小到大排序,好像有同學就因為不排序而丟分了。很簡單,過了。q2 這道題...

JZOJ5962 NOIP2018 貨幣系統

在的國度中共有 n 種不同面額的貨幣,第 i 種貨幣的面額為 a i 你可以假設每一種貨幣都有無窮多張。為了方便,我們把貨幣種數為 n 面額陣列為 a 1 n 的貨幣系統記作 n,a 在乙個完善的貨幣系統中,每乙個非負整數的金額 x 都應該可以被表示出,即對每乙個非負整數 x,都存在 n 個非負整數...

NOIP 數學 JZOJ 3027 計算係數

給出a,b k,n m a,b,k,n,m,a,b,k,n,m,求出 ax by k ax by k ax by k,請求出多項式展開後xny mx ny m xnym 項的係數 10007 10007 10007 可以手算推幾個發現 每個係數按指數n nn遞減再遞增就可以發現是楊輝三角的某一層,然...