当前位置: 首页 > news >正文

童装网站建设文案合肥万户网络科技有限公司

童装网站建设文案,合肥万户网络科技有限公司,wordpress户外俱乐部主题,南召微网站开发New Year Garland 题意 ​ 用m种颜色的球装饰n层的圣诞树,圣诞树的第i层由 l i l_{i} li​个彩球串成,且同一层相邻的球颜色不同,相邻的层之间彩球颜色的集合不同,问有多少种方案,对p取模。 分析 ​ 首先先计算每一…

New Year Garland

题意

​ 用m种颜色的球装饰n层的圣诞树,圣诞树的第i层由 l i l_{i} li个彩球串成,且同一层相邻的球颜色不同,相邻的层之间彩球颜色的集合不同,问有多少种方案,对p取模。

分析

​ 首先先计算每一层各种小球选取情况下的方案数,因为限制每层小球只有 l i l_{i} li个,且 l i ≤ 5000 l_{i} \leq 5000 li5000,所以可以预处理出 g [ l i ] [ j ] g[l_{i}][j] g[li][j]表示 l i l_{i} li个球中有 j j j种颜色时放置的方案数,递推方程就是
g [ i ] [ j ] = g [ i − 1 ] [ j − 1 ] + g [ i − 1 ] [ j ] ∗ ( j − 1 ) g[i][j]=g[i-1][j-1]+g[i-1][j]*(j-1) g[i][j]=g[i1][j1]+g[i1][j](j1)

边界是 g [ 0 ] [ 0 ] = 1 g[0][0]=1 g[0][0]=1,递推方程的意思是要么在第 i − 1 i-1 i1个球后面放一个未出现的颜色的小球,要么放一个已经出现过的颜色的小球,因为相邻颜色不同,所以有 ( j − 1 ) (j-1) (j1)种方式,第i层放j种颜色小球的放置方案数就成了
j ! ∗ ( m j ) ∗ g [ l i ] [ j ] j!*\binom{m}{j}*g[l_{i}][j] j!(jm)g[li][j]

​ 然后再考虑层与层之间的限制,假如没有这个限制的话,dp就可以写成
d p [ i ] [ j ] = j ! ∗ ( m j ) ∗ g [ l i ] [ j ] ∗ ∑ k = 1 m i n ( m , l i − 1 ) d p [ i − 1 ] [ k ] dp[i][j]=j!*\binom{m}{j}*g[l_{i}][j]*\sum_{k=1}^{min(m,\ l_{i-1})}{dp[i-1][k]} dp[i][j]=j!(jm)g[li][j]k=1min(m, li1)dp[i1][k]

加上限制后,只需要减去相同颜色集合的对应方案数即可,那就成了
d p [ i ] [ j ] = j ! ( ( m j ) ∗ g [ l i ] [ j ] ∗ ∑ k = 1 m i n ( m , l i − 1 ) d p [ i − 1 ] [ k ] − g [ l i ] [ j ] ∗ d p [ i − 1 ] [ j ] ) dp[i][j]=j!(\binom{m}{j}*g[l_{i}][j]*\sum_{k=1}^{min(m,\ l_{i-1})}{dp[i-1][k]}-g[l_{i}][j]*dp[i-1][j]) dp[i][j]=j!((jm)g[li][j]k=1min(m, li1)dp[i1][k]g[li][j]dp[i1][j])
最终的答案就是
a n s = ∑ i = 1 m i n ( m , l n ) d p [ n ] [ i ] ans = \sum_{i=1}^{min(m,\ l_{n})}{dp[n][i]} ans=i=1min(m, ln)dp[n][i]
现在思考一下能够预处理的是 g [ l i ] [ j ] g[l_{i}][j] g[li][j]以及 j ! j! j! ( m j ) \binom{m}{j} (jm)好似能预处理出来,又好似因为p不一定是素数,不一定能求逆,尝试把 j ! j! j!带入方程观察,发现 ( m j ) \binom{m}{j} (jm)就变成了 A m j A_{m}^{j} Amj,可以开心的预处理了。前面都解决了,但里面还有一个 d p [ i − 1 ] [ k ] dp[i-1][k] dp[i1][k]的求和每次都要跑满循环,再次观察能否 O ( 1 ) O(1) O(1)求出。当然一定是可以边计算边求出上一轮dp的和,所以这个值也可以 O ( 1 ) O(1) O(1)求出了。边界就是第一轮的dp的和为1。但这就结束了嘛?显然没有:(。因为 n ≤ 1000000 n \leq 1000000 n1000000导致dp数组空间巨大,此时,不难发现,该轮的dp只与上一轮的dp值有关,即好似可以滚动数组优化之类的操作,用两个数组即可完成dp过程。

AC代码

#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int g[5010][5010], fac[5010], fac1[1000010], dp[5010], tmp[5010];
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n, m, p;cin >> n >> m >> p;vector<int> l(n + 1);for (int i = 1; i <= n; i++) {cin >> l[i];}g[0][0] = 1;for (int i = 1; i <= 5000; i++) {for (int j = 1; j <= i; j++) {g[i][j] = (g[i - 1][j - 1] + 1LL * (j - 1) * g[i - 1][j] % p) % p;}}fac[0] = 1;for (int i = 1; i <= 5000; i++) {fac[i] = 1LL * fac[i - 1] * i % p;}fac1[0] = 1;for (int i = 1; i <= m; i++) {fac1[i] = 1LL * fac1[i - 1] * (m - i + 1) % p;}LL sum = 1;for (int i = 1; i <= n; i++) {LL res = 0;for (int j = 1; j <= l[i]; j++) {tmp[j] = (1LL * fac1[j] * g[l[i]][j] % p * sum % p - 1LL * fac[j] * g[l[i]][j] % p * dp[j] % p + p) % p;res = (tmp[j] + res) % p;}sum = res;for (int j = 1; j <= l[i - 1]; j++) {dp[j] = 0;}for (int j = 1; j <= l[i]; j++) {dp[j] = tmp[j];}}cout << sum << '\n';return 0;
}
http://www.yayakq.cn/news/488624/

相关文章:

  • 三网合一网站源代码厦门公司网站设计
  • dxc采集wordpress插件网站优化培训好学吗
  • 方维o2o 2.9蓝色团购网站程序源码模板做网站前段可以考什么证书
  • 简述如何让网站排名快速提升新建网站百度搜不到
  • 芜湖哪里有做网站的公司网站 百度
  • 怎么建立手机网站专业网站设计力荐亿企邦
  • 推荐优秀的企业网站设计设计师网址推荐
  • 做全屏网站图片显示不全凡科网商城
  • ps怎么做华为网站界面深圳商业策划公司十大公司
  • 国外外贸网站代做土木毕业设计网站
  • 江苏城乡住房建设部网站html5响应式布局
  • 网站系统建设合同北京昌平网站建设
  • 邢台网站设计哪家好怎么网站推广
  • 太原企业网站制作公司手机app是怎么开发出来的
  • wordpress建站不知道密码千阳县住房和城乡建设局网站
  • 亚翔建设集团有限公司网站最吸引人的汽车广告语
  • 天津滨海新区网站建设企业网站可以做跨境电商吗
  • 常熟专业做网站义乌小商品市场进货渠道
  • 个人网站备案内容不合格网站做支付需要准备什么
  • 商城网站建设资讯wordpress 微信分享
  • 专业酒店建设信息网站用WordPress配置cms
  • 红酒公司的网站建设网站设计制作花多少钱
  • 企业网站本身应该就是企业( )的一部分工业和信息化部icp网站备案系统
  • 电子商务网站建设计划做游戏音频下载网站
  • 做网站要准备的资料福州外语外贸学院
  • 网站建设CEO苏州网站建设网络推广
  • 萧山工程建设有限公司网站项目网站开发
  • 西安好的网站建设公司排名交友wordpress
  • 怎么在网站上做网页网页制作公司哪家比较好
  • 标准营销型网站定做价格小制作 简单 步骤