下课了,露露、花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”。

这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮。尺子有 2n + 1 条等距的刻度线,第 n + 1 条 刻度线恰好在尺子的中心,且与正三棱柱的不在课桌上的棱完全重合。

露露发现这个“跷跷板”是不平衡的(尺子不平行于地平面)。于是,她又在尺子上放 了几个橡皮,并移动了一些橡皮的位置,使得尺子的 2n + 1 条刻度线上都恰有一块相同质 量的橡皮。“跷跷板”平衡了,露露感到很高兴。

花花觉得这样太没有意思,于是从尺子上随意拿走了 k 个橡皮。令她惊讶的事情发生了: 尺子依然保持着平衡! 萱萱是一个善于思考的孩子,她当然不对尺子依然保持平衡感到吃惊,因为这只是一个 偶然的事件罢了。令她感兴趣的是,花花有多少种拿走 k 个橡皮的方法,使得尺子依然保 持平衡?当然,为了简化问题,她不得不做一些牺牲——假设所有橡皮都是拥有相同质量的 质点。但即使是这样,她也没能计算出这个数目。放学后,她把这个问题交给了她的哥哥/ 姐姐——Hibarigasaki 学园学生会会长,也就是你。当然,由于这个问题的答案也许会过于 庞大,你只需要告诉她答案 mod p 的值。

Solution

非常好的一道题。

题目相当于在两边放k个数,使他们相等,我们可以跑一个整数划分数dp。

但是这道题有一个限制是每个数是n以内的。

所以我们要在枚举超过n时减掉不合法方案数,dp[i-(n+1)][j-1]就是不合法方案。

最后枚举一边放了多少个,算一下,注意讨论中间放的情况。

Code

#include<iostream>
#include<cstdio>
#define R register
using namespace std;
long long dp[][],ans,n,k,p,t;
int main()
{
scanf("%lld",&t);
for(int o=;o<=t;++o)
{
scanf("%lld%lld%lld",&n,&k,&p);
ans=;
dp[][]=;
for(R int i=;i<=n*k;++i)
for(R int j=;j<=i&&j<=k;++j)
{
dp[i][j]=(dp[i-j][j-]+dp[i-j][j])%p;
if(i>n)dp[i][j]=(dp[i][j]-dp[i-(n+)][j-]+p)%p;
}
for(R int j=;j<=k;++j)
for(R int i=;i<=n*k;++i)
{
ans=(ans+dp[i][j]*dp[i][k-j])%p;
if(j<k)ans=(ans+dp[i][j]*dp[i][k-j-])%p;
}
printf("%lld\n",ans);
}
return ;
}

[HEOI2014]平衡(整数划分数)的更多相关文章

  1. BZOJ3612 [Heoi2014]平衡 整数划分

    [Heoi2014]平衡 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 348  Solved: 273[Submit][Status][Discus ...

  2. bzoj 3612 [Heoi2014]平衡——整数划分(dp)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612 因为力矩的缘故,变成了整数划分. 学习到了整数划分.就是那个图一样的套路.https: ...

  3. bzoj3612 [Heoi2014]平衡——整数划分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612 看了好久才弄清楚题意... 原来整数划分就是这样的啊:https://blog.csd ...

  4. BZOJ 3612: [Heoi2014]平衡( dp )

    枚举Fl, 就变成一个整数划分的问题了...f(i,j) = f(i-j,j-1)+f(i-j,j)-f(i-N-1,j-1)递推.f(i,j)表示数i由j个不同的数组成,且最大不超过N的方案数 -- ...

  5. [HEOI2014]平衡

    [HEOI2014]平衡 转化为求选择k个数,和为(n+1)*k的方案数 保证,每个数[1,2*n+1]且最多选择一次. 限制k个很小,所以用整数划分的第二种方法 f[i][j],用了i个,和为j 整 ...

  6. BZOJ 3612: [Heoi2014]平衡

    3612: [Heoi2014]平衡 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 283  Solved: 219[Submit][Status][ ...

  7. P4104 [HEOI2014]平衡

    友情提醒:取模太多真的会TLE!!! P4104 [HEOI2014]平衡 题解 本题属于 DP-整数划分 类问题中的 把整数 n 划分成 k 个不相同不大于 m 的正整数问题 设置DP状态  f[ ...

  8. bzoj 3612: [Heoi2014]平衡【整数划分dp】

    其实就是-n~n中求选k个不同的数,和为0的方案数 学到了新姿势叫整数划分,具体实现是dp 详见:https://blog.csdn.net/Vmurder/article/details/42551 ...

  9. 【递推】Bzoj3612[Heoi2014]平衡

    Description 下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”.      这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具, 上面 摆着一个尺 ...

随机推荐

  1. JavaScript生成二维码图片

    1.引入一个二维码工具的js文件,同时需要引入jquery文件 下面是jquery.qrcode.min.js文件内容: (function(r){r.fn.qrcode=function(h){va ...

  2. 面试题(校招java)

    1:linux线程和进程的区别? 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程 ...

  3. 【学亮IT手记】jQuery each()函数用法实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  4. app自动化测试Appium+python

    一.node.js安装 https://nodejs.org/en/download/ ##一直下一步 ###cmd查看 二.  .NET Framework安装 https://www.micros ...

  5. KVM+QEMU虚拟化概念

    概念: KVM,即Kernel-basedvirtual machine,由redhat开发,是一种开源.免费的虚拟化技术.对企业来说,是一种可选的虚拟化解决方案. 定义:基于Linux内核的虚拟机 ...

  6. zabbix自定义监控项

    原因:zabbix监控系统自带的监控规则有限,如果需要更加灵活的定义监控项,可以通过修改配置文件实现 vim xxx/zabbix_agentd.conf UnsafeUserParameters=1 ...

  7. 安装使用阿里云的yum源

    CentOS 1.备份(备份本地Yum源) mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.下 ...

  8. MyBatis SpringBoot 杂记

    最近接了个xxx代码. 不能说人家不好, 因为必进年月久了.能用这么长时间, 不就说明还不错么?! 我们现在每天写的, 能超出人家的么~~~ 呵呵 Java项目中, 把动态数据源切换的框架整合进来. ...

  9. NaN与Null与undefiined的关系

    在js中,定义一个变量需要通过关键字var来定义,定义的变量可以是字符串.数字等等都行.但是如果你只是定义了一个变量,没有给他赋值,那么它就默认为'undefined'.例如 var name; co ...

  10. Qt setStyleSheet

    Qt中设置按钮或QWidget的外观是,可以使用QT Style Sheets来进行设置,非常方便.可以用setStyleSheet("font: bold; font-size:20px; ...