CSP賽前集訓 長壽花

2021-09-29 05:24:39 字數 2953 閱讀 8277

題目描述:(暫不提供)

這道題考場沒來得及看。

很顯然這是一道dpdp

dp題。首先我們設:

g i,

jg_

gi,j​為i

ii個位置,j

jj種裝飾,相鄰兩兩不同裝飾種類的方案數。

只考慮1−j

1-j1−

j種裝飾。

g i,

j=gi

−1,j

∗(j−

1)+g

i−1,

j−1∗

jg_=g_*(j-1) +g_*j

gi,j​=

gi−1

,j​∗

(j−1

)+gi

−1,j

−1​∗

j。對於第一項,前面已經有j

jj種裝飾,那就可以任意填j−1

j-1j−

1種裝飾。

對於第二項,前面有j−1

j-1j−

1種裝飾,你並不知道前面j−1

j-1j−

1種裝飾包含1−j

1-j1−

j中的哪一種,所以乘上jjj。

然後設fi,

jf_

fi,j

​表示第i

ii行選j

jj種裝飾的方案

於是列舉k

kk來被轉移。

當k

kk不等於j

jj的時候:fi,

j∗[c

mk∗g

ai,k

]−

>fi

+1,k

f_*[c_^k*g_,k}] -> f_

fi,j​∗

[cmk

​∗ga

i​,k

​]−>fi

+1,k

​當kk

k等於j

jj的時候:fi,

j∗[(

cmk−

1)∗g

ai,k

]−

>fi

+1,k

f_*[(c_^k-1)*g_,k}]->f_

fi,j​∗

[(cm

k​−1

)∗ga

i​,k

​]−>fi

+1,k

​然後整合一下:

f i,

j=[c

mk∗g

ai,j

∗σkf

i−1,

k]−f

i−1,

j∗ga

i,

jf_=[c_^k*g_,j}*\sigma_f_]-f_*g_,j}

fi,j​=

[cmk

​∗ga

i​,j

​∗σk

​fi−

1,k​

]−fi

−1,j

​∗ga

i​,j

​然後注意到σkf

i−1,

k\sigma_f_

σk​fi−

1,k​

是可以上一次算好的。所以fi,

jf_

fi,j

​的轉移就是o(1

)o(1)

o(1)

的。然後注意下組合數要用分解質因數來算。

經過z jj

zjjzj

j的輔導,總算是調出來了。

時限給了5s

ss,然後我跑了一秒半。

吸了氧以後就跑進1s

ss了。

%

:pragma gcc optimize(2

)%:pragma gcc optimize

("ofast")%

:pragma gcc optimize

("inline"

)#include

#include

using

namespace std;

const

int n =

5010

;const

int m =

1000010

;inline

void

read

(int

&x)int cnt =

0,p[m]

,vis[m]

,c[m]

,t[m]

;int tot =

0,used[m]

,f[2

][n]

,g[n]

[n];

int n,m,mod,a[m]

,pre,ans;

inline

void

get_p()

}}inline

intf_pow

(int a,

int x)

inline

void

inc(

int x)

if(x >1)

}inline

void

dec(

int x)

inline

intcalc

(int x,

int y)

intmain()

for(

int i =

1;i <= m && i <= a[n]

;++ i) ans =

(ans + f[n &1]

[i])

% mod;

printf

("%d"

,(ans + mod)

% mod)

;fclose

(stdin);

fclose

(stdout);

return0;

}

當然空間也要注意,f

ff陣列是可以滾動的。

CSP賽前集訓 路徑

題目描述 暫不提供 這道題很明顯是一道原題。原題 gerald and giant chess 然後直接那麼做就好了 逃 這題其實之前也沒做過。但賽後聽說是原題結果發現果真是原題。首先n nn和m mm都很大,而k kk比較小,那麼我們的狀態肯定與k kk有關。首先將那k kk個點按照橫縱座標從小到...

CSP賽前集訓 表示式

題目描述 暫不提供 這道題放在第一題說明它很水。但是呢正是因為它很水但是細節較多所以我最後乙個寫這道題。結果呢後兩題做太久了,最好做的t1t1 t1反而沒拿分。這道題說實話就是要考慮多種情況。考慮把它分成三層 原串,去空格後的串,壓縮數字後的串。對於原串你就判斷一下有沒有別的字元或者全是空格或者這就...

賽前集訓前的總結(警醒)

從搬機房到現在總共考了九場試,並且靠這九場試分了一下機房,然後就在新機房裡倒數了 這幾次考試分數如下 70 228 165 60 85 140 100 20 160 總分1046 排名如下 11 1 9 27 7 12 15 28 9 總排名第10 然後分數統計圖是這樣的 名次統計圖是這個樣子的 統...