bzoj 4465 游戏中的学问
Written with StackEdit.
Description
大家应该都见过很多人手拉手围着篝火跳舞的场景吧?一般情况下,大家手
拉手跳舞总是会围成一个大圈,每个人的左手拉着旁边朋友的右手,右手拉着另一侧朋友的左手。
不过,如果每一个人都随机的拉住两个不同人的手,然后再慢慢散开,事情
就变得有趣多了——此时大家依旧会形成圈,不过却可能会形成多个独立的圈。
当然这里我们依然要求一个人的右手只能拉另一个人的左手,反之亦然。
班里一共有\(N\)个同学,由\(1\)到\(N\)编号。\(Will\)想知道,究竟有多少种本质不同的拉手方案,使得最终大家散开后恰好形成\(k\)个圈呢?
给定两种方案,若存在一个人和他的一只手,满足在这两种方案中,拉着这只手的人的编号不同,则这两种方案本质不同。
Input
输入一行包含三个正整数\(N\),\(k\)和\(P\).
\(3<=3k<=N<=3000,10^4<=p<=2×10^9.\)
Output
输出文件的包含一行一个整数,表示本质不同的方案数对\(p\)的余数。保证\(p\)一定是一个质数。
Sample Input
3 1 1000000009
Sample Output
2
Solution
- 这类游戏的套路其实都大同小异...考虑最后一个人的情况\(dp\)即可.
- 就此题而言,设\(f[i][j]\)表示\(i\)个人形成\(j\)个环的方案数目.
- 考虑最后一个人,他可以插入到前面已经有的环里,不形成新的环.
- 前面\(i-1\)个人有\(i-1\)个位置可以插入.
- 方案数为\(f[i-1][j]*(i-1)\).
- 他也可以形成一个新的环,从前面的\(i-1\)个人中选择\(2\)个人和他成环,而这两人在他左右交换算作两次.
- 方案数为\(f[i-3][j-1]*C_{i-1}^2*2.\)
- 需要注意边界条件,显然有\(f[0][0]=1\),还需要注意的是当\(j<\lfloor i/3 \rfloor\)时,因为至少要三个人组成一个环,这种情况的方案数也为\(0\).
#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
inline int read()
{
int out=0,fh=1;
char jp=getchar();
while ((jp>'9'||jp<'0')&&jp!='-')
jp=getchar();
if (jp=='-')
{
fh=-1;
jp=getchar();
}
while (jp>='0'&&jp<='9')
{
out=out*10+jp-'0';
jp=getchar();
}
return out*fh;
}
int n,k,P;
inline int add(int a,int b)
{
return (1LL*a + 1LL*b) % P;
}
inline int mul(int a,int b)
{
return 1LL * a * b % P;
}
inline int swapC(int x)
{
return mul(x,x-1);
}
const int MAXN=3e3+110;
int f[MAXN][MAXN];
int dp(int i,int j)
{
if(f[i][j]!=-1)
return f[i][j];
if(i==0 && j==0)
return 0;
if(j>(i/3))//注意边界
return 0;
int &res=f[i][j];
res=0;
res=add(res,mul(dp(i-1,j),i-1));
res=add(res,mul(dp(i-3,j-1),swapC(i-1)));
return res;
}
int main()
{
n=read(),k=read(),P=read();
for(int i=0;i<=n;++i)
for(int j=0;j<=k;++j)
f[i][j]=-1;
int ans=dp(n,k);
printf("%d\n",ans);
return 0;
}
bzoj 4465 游戏中的学问的更多相关文章
- bzoj 4465 游戏中的学问(game)
题目描述 输入 输出 样例输入 3 1 1000000009 样例输出 2 提示 solution 令f[i][j]表示i个人围成j个圈的方案数 啥意思呢 可以把一个人塞进前面的圈里(i-1种塞法) ...
- bzoj 4465: [Jsoi2013]游戏中的学问
4465: [Jsoi2013]游戏中的学问 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 121 Solved: 59[Submit][Statu ...
- 「JSOI2013」游戏中的学问
「JSOI2013」游戏中的学问 传送门 考虑 \(\text{DP}\) 设 \(dp_{i, j}\) 表示将前 \(i\) 个人分成 \(j\) 个集合,并且第 \(i\) 个人在第 \(j\) ...
- 【题解】4465 [Jsoi2013]游戏中的学问
原题传送门 线性dp推一推就推出方程 设\(f[i][j]\)表示有\(j\)个人,分成\(i\)组,一共有多少分发 边界为\(f[0][0]=1\),珂以得出方程为\(f[i][j]=(j-1)*( ...
- bzoj4465: [Jsoi2013]游戏中的学问
DP 一个人要么加入一个圈,要么三个人开一圈 #include<cstdio> #include<iostream> #include<cstring> #incl ...
- 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了
地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图
- FPS中受伤UI在VR游戏中的实现思路
FPS中受伤UI在VR游戏中的实现思路 希望实现的效果 这几天一直在尝试各种解决方案,现在算是不完美的解决啦,记录一下心路历程,思路有了算法都比较简单. V_1 玩家胶囊体指向的方向作为正方向,计算出 ...
- 游戏中的人工智能——初探AI
一.游戏中的人工智能 让游戏具有挑战性: 让游戏好玩的关键因素是为之找到合适的难度等级: 人工智能在游戏中的作用是通过提供富有挑战性的竞争对象来让游戏更好玩,而在游戏中行动逼真的非玩家角色(NPC), ...
- 【腾讯GAD暑期训练营游戏程序开发】游戏中的动画系统作业
游戏中的动画系统作业说明文档 一.实现一个动画状态机:至少包含3组大的状态节点
随机推荐
- MMU解读
转:https://blog.csdn.net/yueqian_scut/article/details/24816757 mmu页表也是放在内存中,mmu里有一个寄存器存放页表首地址,从而找到页表( ...
- 20145109 《Java程序设计》第六周学习总结
Chapter 10 I/O 10.1 InputStream & OutputStream a new 'try' edition: try (InputStream input = src ...
- 在Linux上使用Wine安装轻聊版的QQ的步骤讲解
准备 Wine 环境 wine 版本要求,越新越好,我用的 1.7.55,目前最新是1.8rc2. 删除或者备份你的 ~/.wine,如果你之前运行过 wine 的话.因为涉及到少量配置,尽量不要让以 ...
- [nowcoder]最长区间
链接:https://www.nowcoder.com/acm/contest/158/B 求最长连续严格递增序列 线段树模板题,码力弱的一匹调了半天.. 代码: #include<iostre ...
- 读取和修改xml
如有一个xml文件DownData.xml,内容如下 <?xml version="1.0" standalone="yes"?> <Root ...
- Pandas描述性统计
有很多方法用来集体计算DataFrame的描述性统计信息和其他相关操作. 其中大多数是sum(),mean()等聚合函数,但其中一些,如sumsum(),产生一个相同大小的对象. 一般来说,这些方法采 ...
- JNI_Z_09_Java的字符串
ZC: jstring 就是 Java中的String对象 ZC: 10.8 Unicode字符串结尾(http://www.360doc.cn/article/14233282_321497569. ...
- AtCoder ARC097C Sorted and Sorted:dp
传送门 题意 有 $ 2n $ 个球排成一行,其中恰好有 $ n $ 个白球和 $ n $ 个黑球.每个球上写着数字,其中白球上的数字的并集为 $ \lbrace 1 \dots n\rbrace $ ...
- 《JavaScript高级程序设计》第6章补充 继承
基于原型链继承 将父类的实例赋给子类的prototype来实现继承. 原理:父类的实例有父类所有的实例属性和原型方法,将它赋给子类的prototype后,子类的创建的实例就有会__proto__属性指 ...
- mysql数据库优化课程---12、mysql嵌套和链接查询
mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...