jzoj4800-[GDOI2017模拟9.24]周末晚会【dp,循环重构】
正题
题目大意
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∑nfi−1,j
设rrr表示长度为lll不考虑循环重构的方案数那么有
ri=∑j=1kfi,j∗(j+1)r_i=\sum_{j=1}^k f_{i,j}*(j+1)ri=j=1∑kfi,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,循环重构】相关推荐
- [2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)
[2021.1.13多校省选模拟2]T1 一个经典的轮廓线dp,可以发现一定可以找到一条轮廓将这个图形分开,然后使得左半部分由左边处理,右半部分由右边处理,然后我们只需要处理这个折线即可,具体实现需要 ...
- 【SSL2119】【2011分区联赛模拟试题】电子眼【DP】
Description 中山市石一个环境优美.气候宜人的小城市.因为城市的交通并不繁忙,市内的道路网很稀疏.准确地说,中山市有N-1条马路和N个路口,每条马路连接两个路口,每两个路口之间最多只有一条马 ...
- 2011分区联赛模拟试题 电子眼(树形dp)
2011分区联赛模拟试题 电子眼 Description 中山市石一个环境优美.气候宜人的小城市.因为城市的交通并不繁忙,市内的道路网很稀疏.准确地说,中山市有N-1条马路和N个路口,每条马路连接两个 ...
- LS 24 Bracket sequence(DP)
Bracket sequence Given string s made up with (, ), ?, count the way to substitude ? with ( or ) to f ...
- 【NOIP模拟题】Incr(dp)
太水的dp没啥好说的.. #include <cstdio> #include <cstring> #include <cmath> #include <st ...
- 【NOIP模拟赛】超级树 DP
这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了 ...
- 2018.10.04 NOIP模拟 航班(tarjan+树形dp)
传送门 考场上自己yy了一个双连通只有40分. 然后换根dp求最长路就行了. 代码 转载于:https://www.cnblogs.com/ldxcaicai/p/10084917.html
- 【2011.10.29模拟】24点游戏题解
题目描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...
- 21.4.24周末总结(第七次)
通过前一阵对动态规划的学习,动态规划就是子问题之间的关系,然后所有状态里找最优,即一个问题的最优解只取决于其子问题的最优解,其他的不是最优的解对问题并没有影响. 这一周学的是区间dp,和线性dp大同小 ...
最新文章
- 天津科技大学 物理实验平台使用教程及相关问题
- gorm增删查改json_gorm 关联查询请教
- ABAP语言常用的系统字段及函数
- 2005/7/15[随便写写]
- Xor Transformation
- [探索] 利用promise做一个请求锁
- Redis运维和开发学习笔记(1) Redis简介
- 项目总结2:ionic3开发跨平台App如何设置和替换应用图标及启动图
- 操作系统学习笔记-2.1.5线程概念和多线程模型
- Mechine Learing一:工程刚需的 “算法” 评估指标
- 随想录(elf文件)
- @Python 程序员,如何实现狂拽酷炫的 3D 编程技术?
- 【转】一些linux基础命令
- Plc通讯控制三菱FX3U与台达VFD变频器通讯案例程序 485通信,总线控制
- 计算机物理仿真,仿真物理实验室初中完整版
- Virtualbox使用及问题
- Unity中游戏的存档与读档
- 【量化交易】 量化因子 情绪类因子计算
- 实现app第一次安装浮层引导View!
- golang开发工程师-第一步:golang入门基础教学
热门文章
- 腾讯架构师讲解Java接口的继承与抽象类
- 小肚皮最新版本_小肚皮官方版下载_小肚皮app - Win7旗舰版
- java换水_java-交流灌水之谁是水王?
- mui 时间样式错乱_微信编辑器样式排版错位怎么回事?
- java 监听文件内容_java 监听文件内容变化
- 东北大学计算机 大一物理考试题,东北大学大学物理期末考题及答案Word版
- 机器学习之数据集划分——训练集测试集划分,划分函数,估计器的使用
- leetcode——344. 反转字符串
- [Redis6]key键操作
- [SpringBoot2]文件上传_单文件与多文件上传的使用