YbtOJ 20067 糖果分配

2022-06-13 15:36:08 字數 902 閱讀 9789

可以視作將 \(m\) 個位置分成 \(n\) 份,第 \(i\) 份上需要填上相同且在 \([l_i,r_i]\) 中的數的積的和。

所以可以設 \(f[i][j][k]\) 表示前 \(j\) 個位置,填了前 \(i\) 個數所有方案積的和。

那麼有\[f[i][j]=f[i-1][k]+\sum^_(i^)

\]時間複雜度 \(o(nm^2)\)。

#include using namespace std;

const int n=410,mod=1e9+7;

int n,m,ans,l[n],r[n],f[n][n],g[n][n],power[n][n];

int main()

for (int i=1;i<=n;i++) scanf("%d",&l[i]);

for (int i=1;i<=n;i++) scanf("%d",&r[i]);

for (int i=1;i<=n;i++)

for (int j=0;j<=m;j++)

for (int k=l[i];k<=r[i];k++)

g[i][j]=(g[i][j]+power[k][j])%mod;

f[0][0]=1;

for (int i=1;i<=n;i++)

for (int j=0;j<=m;j++)

for (int k=0;k<=j;k++)

f[i][j]=(f[i][j]+1ll*f[i-1][k]*g[i][j-k])%mod;

printf("%d",f[n][m]);

return 0;

}

分糖果(模擬)

問題描述 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲 每個小朋友都把自己的糖果分一半給左手邊的孩子。一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。你的任務是 在已知的初始糖果情形下,老師一共需要補...

分糖果問題

問題描述 有不同分數的小孩排隊,怎麼分糖果使得糖果數最小,且分數高的小孩分到盡可能多的糖果。分析 每個小孩至少可分到乙個糖果,且分數不固定,所以分數高的小孩要盡可能的只比旁邊的兩個人分的糖果多,而分數低的要盡可能的少。解題思路 分別從前後進行掃瞄,讓每個小孩都能分到糖果,保證分數高的盡可能多於兩邊的...

題目 分糖果

有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲 每個小朋友都把自己的糖果分一半給左手邊的孩子。一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。你的任務是 在已知的初始糖果情形下,老師一共需要補發多少個糖...