可以視作將 \(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個糖果,從而變成偶數。反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。你的任務是 在已知的初始糖果情形下,老師一共需要補發多少個糖...