其实就是-n~n中求选k个不同的数,和为0的方案数

学到了新姿势叫整数划分,具体实现是dp 详见:https://blog.csdn.net/Vmurder/article/details/42551603

设f[i][j]为j个数和为i的方案数,然后因为互不相同,所以转移的话有两种,就是当前j个数全部+1,和当前j个数全部+1并且多填一个1出来,也就是f[i][j]=f[i-j][j]+f[i-j][j-1]

但是这里要求选的数不能超过n,我们考虑i>n的f中一定有一个大于n的数,我们把这种情况减掉就行了,也就是f[i][j]-=f[i-n-1][j-1]



这是上面那个blog的截图

#include<iostream>
#include<cstdio>
using namespace std;
const int N=100005;
int T,n,m,mod,f[N][15],ans;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
T=read();
while(T--)
{
n=read(),m=read(),mod=read();
f[0][0]=1,ans=0;
for(int i=1;i<=n*m;i++)
for(int j=1;j<=m;j++)
{
if(i>=j)
f[i][j]=(f[i-j][j]+f[i-j][j-1])%mod;
if(i>n)
f[i][j]=(f[i][j]-f[i-n-1][j-1]+mod)%mod;
}
for(int i=1;i<=n*m;i++)
for(int j=1;j<=m;j++)
{
ans=(ans+f[i][j]*f[i][m-j])%mod;
if(j!=m)
ans=(ans+f[i][j]*f[i][m-j-1])%mod;
}
printf("%d\n",ans+(m==1));
}
return 0;
}

最新文章

  1. 高通AR和友盟SDK的AndroidManifest.xml合并
  2. APIJSON,让接口见鬼去吧!
  3. ytu 1059: 判别该年份是否闰年(水题,宏定义)
  4. 数据结构之图 Part3 – 2 遍历
  5. 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载
  6. Matlab验证公式取值范围
  7. chart.js 示例
  8. Qt5.8以上版本编译Oracle数据库的OCI驱动教程
  9. ansible服务部署与使用
  10. tomcat安装启动startup.bat文件命令行界面出现乱码的问题解决
  11. JavaScript基础回顾一(类型、值和变量)
  12. 最全,可直接用的一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等。
  13. Java程序员从阿里拿到offer回来,这些面试题你会吗?
  14. 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面
  15. dbdeployer 快速安装MySQL8.0各测试环境
  16. kafka definitive guide - reading notes
  17. 深入理解Linux内核-虚拟文件系统
  18. linux shell 随机字符生成单词
  19. Dynomite 安装配置
  20. 接口与协议学习笔记-AMBA片上通信协议_APB_AHB_AXI_AXI4不同版本(二)

热门文章

  1. Flex设置PopUpManager创建modal(模态)窗口的背景样式
  2. typeof、constructor和instanceof
  3. SQL SERVER 2012 第五章 创建和修改数据表 の CREATE语句
  4. Fibonacci--poj3070(矩阵快速幂)
  5. Wannafly挑战赛1
  6. ubuntu 16.04上安装php5.6
  7. Centos 6.x 安装Nagios及WEB管理nagiosql实现windows及linux监控指南
  8. BZOJ 1005 明明的烦恼 Prufer序列+组合数学+高精度
  9. 五分钟搭建 Flash 视频直播站
  10. Jenkins系列之-—04 配置用户和权限控制