正题


题目大意

nnn个人的圆桌,可以放男可以放女,然后要求不能有连续kkk个女生坐在一起。求方案总数。


解题思路

先不考虑圆桌,设fi,jf_{i,j}fi,j​表示放了i个人,最前面有连续jjj个女生,动态转移方程显然
fi,j=fi−1,j−1(j!=0)f_{i,j}=f_{i-1,j-1}(j!=0)fi,j​=fi−1,j−1​(j!=0)
fi,0=∑j=0nfi−1,jf_{i,0}=\sum_{j=0}^n f_{i-1,j}fi,0​=j=0∑n​fi−1,j​

设rrr表示长度为lll不考虑循环重构的方案数那么有
ri=∑j=1kfi,j∗(j+1)r_i=\sum_{j=1}^k f_{i,j}*(j+1)ri​=j=1∑k​fi,j​∗(j+1)
(j+1j+1j+1)表示圆桌旋转的方法

然后我们定义qiq_iqi​表示长度为iii且不由循环节构成的方案总数那么有
qi=ri−∑d∣iqdq_i=r_i-\sum_{d|i}q_dqi​=ri​−d∣i∑​qd​
然后定义sis_isi​表示长度为iii且包括循环重构的方案那么有
si=∑d∣iqdds_i=\sum_{d|i}\frac{q_d}{d}si​=d∣i∑​dqd​​
(循环重复了ddd次)


codecodecode

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const ll XJQ=1e8+7,N=2010;
ll power(ll x,ll b){ll ans=1;while(b){if(b&1) ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans;
}
ll t,p[N][N],r[N],q[N],ans,n,k;
int main()
{scanf("%lld",&t);while(t--){scanf("%lld%lld",&n,&k);memset(p,0,sizeof(p));p[1][0]=1;for(ll i=1;i<=2000;i++)for(ll j=0;j<=min(i-1,k);j++){p[i+1][0]=(p[i+1][0]+p[i][j])%XJQ;p[i+1][j+1]+=p[i][j];}memset(r,0,sizeof(r));for(ll i=1;i<=n;i++)for(ll j=0;j<=k;j++)(r[i]+=p[i][j]*(j+1)%XJQ)%=XJQ;ans=0;for(ll i=1;i<=n;i++){q[i]=r[i];for(ll j=1;j<i;j++)if(i%j==0)q[i]=(q[i]-q[j]+XJQ)%XJQ; }for(ll i=1;i<=n;i++)if(!(n%i)) (ans+=q[i]*power(i,XJQ-2)%XJQ)%=XJQ;if(n<=k) ans++;printf("%lld\n",ans);}
}

jzoj4800-[GDOI2017模拟9.24]周末晚会【dp,循环重构】相关推荐

  1. [2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)

    [2021.1.13多校省选模拟2]T1 一个经典的轮廓线dp,可以发现一定可以找到一条轮廓将这个图形分开,然后使得左半部分由左边处理,右半部分由右边处理,然后我们只需要处理这个折线即可,具体实现需要 ...

  2. 【SSL2119】【2011分区联赛模拟试题】电子眼【DP】

    Description 中山市石一个环境优美.气候宜人的小城市.因为城市的交通并不繁忙,市内的道路网很稀疏.准确地说,中山市有N-1条马路和N个路口,每条马路连接两个路口,每两个路口之间最多只有一条马 ...

  3. 2011分区联赛模拟试题 电子眼(树形dp)

    2011分区联赛模拟试题 电子眼 Description 中山市石一个环境优美.气候宜人的小城市.因为城市的交通并不繁忙,市内的道路网很稀疏.准确地说,中山市有N-1条马路和N个路口,每条马路连接两个 ...

  4. LS 24 Bracket sequence(DP)

    Bracket sequence Given string s made up with (, ), ?, count the way to substitude ? with ( or ) to f ...

  5. 【NOIP模拟题】Incr(dp)

    太水的dp没啥好说的.. #include <cstdio> #include <cstring> #include <cmath> #include <st ...

  6. 【NOIP模拟赛】超级树 DP

    这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了 ...

  7. 2018.10.04 NOIP模拟 航班(tarjan+树形dp)

    传送门 考场上自己yy了一个双连通只有40分. 然后换根dp求最长路就行了. 代码 转载于:https://www.cnblogs.com/ldxcaicai/p/10084917.html

  8. 【2011.10.29模拟】24点游戏题解

    题目描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...

  9. 21.4.24周末总结(第七次)

    通过前一阵对动态规划的学习,动态规划就是子问题之间的关系,然后所有状态里找最优,即一个问题的最优解只取决于其子问题的最优解,其他的不是最优的解对问题并没有影响. 这一周学的是区间dp,和线性dp大同小 ...

最新文章

  1. 天津科技大学 物理实验平台使用教程及相关问题
  2. gorm增删查改json_gorm 关联查询请教
  3. ABAP语言常用的系统字段及函数
  4. 2005/7/15[随便写写]
  5. Xor Transformation
  6. [探索] 利用promise做一个请求锁
  7. Redis运维和开发学习笔记(1) Redis简介
  8. 项目总结2:ionic3开发跨平台App如何设置和替换应用图标及启动图
  9. 操作系统学习笔记-2.1.5线程概念和多线程模型
  10. Mechine Learing一:工程刚需的 “算法” 评估指标
  11. 随想录(elf文件)
  12. @Python 程序员,如何实现狂拽酷炫的 3D 编程技术?
  13. 【转】一些linux基础命令
  14. Plc通讯控制三菱FX3U与台达VFD变频器通讯案例程序 485通信,总线控制
  15. 计算机物理仿真,仿真物理实验室初中完整版
  16. Virtualbox使用及问题
  17. Unity中游戏的存档与读档
  18. 【量化交易】 量化因子 情绪类因子计算
  19. 实现app第一次安装浮层引导View!
  20. golang开发工程师-第一步:golang入门基础教学

热门文章

  1. 腾讯架构师讲解Java接口的继承与抽象类
  2. 小肚皮最新版本_小肚皮官方版下载_小肚皮app - Win7旗舰版
  3. java换水_java-交流灌水之谁是水王?
  4. mui 时间样式错乱_微信编辑器样式排版错位怎么回事?
  5. java 监听文件内容_java 监听文件内容变化
  6. 东北大学计算机 大一物理考试题,东北大学大学物理期末考题及答案Word版
  7. 机器学习之数据集划分——训练集测试集划分,划分函数,估计器的使用
  8. leetcode——344. 反转字符串
  9. [Redis6]key键操作
  10. [SpringBoot2]文件上传_单文件与多文件上传的使用