题意:

Gorwin is very interested in equations. Nowadays she gets an equation like this
x1+x2+x3+⋯+xn=n, and here

0≤xi≤nfor1≤i≤nxi≤xi+1≤xi+1for1≤i≤n−1

For a certain n, Gorwin wants to know how many combinations of xi satisfies above condition.
For the answer may be very large, you are expected output the result after it modular m.

1≤T<20
1≤n≤50000
1≤m≤1000000000

思路:

相邻两个数,后者要么和前者相等,要么比前者大一。可以知道x1...xn用unique去重后一定是一段连续的数。

x1要么是0,要么是1。不可能从1以后的某个数开始。因为那样是不可能得到n的~

也就是x1...xn一定是从0或1开始的连续的一段数。

然后发现其实是从1开始的连续的一段数(0是来“凑热闹”的【凑个数】)

假设这连续的一段数是从1~k。可知k不超过sqrt(n)。

DP结构出来了。dp[i][j]:从1~i这 i 种数组成和为j的方案数。

*:无须担心组成和为j的xi的个数。【肯定不会超过n个,因为最小为1,就算全是1,最多也就n个】。少于n个前面用0补全。

dp[i][j]=dp[i][j-i]+dp[i-1][j-i]

*写出一些dp[i][j]以观察正确性。

代码:

int T,n,m;
int dp[320][50010]; int main(){ cin>>T;
rep(t,1,T){
scanf("%d%d",&n,&m);
int k=1;
while(k*(k+1)<=2*n) ++k;
--k;
mem(dp,0);
dp[0][0]=1;
rep(i,1,k){
rep(j,i,n){
dp[i][j]=(dp[i][j-i]+dp[i-1][j-i])%m;
}
}
int ans=0;
rep(i,1,k) ans=(ans+dp[i][n])%m;
printf("Case #%d: %d\n",t,ans);
} return 0;
}

最新文章

  1. 折腾了1周把程序从sqlserver迁移到oracle上了,每折腾一次需要耗费1周时间
  2. CSS3设置多张背景图片
  3. php 中如何创建一个空对象
  4. Listview的点击事件
  5. ERP_基于Oracle ADF的定制化企业级IT系统解决方案
  6. 易企秀 we+ Maka 兔展 四大H5页面制作工具
  7. Android 实用代码七段(二)
  8. WordPress插件制作教程(二): 编写一个简单的插件
  9. Codility 1: equilibrium
  10. linux下MMC/SD/SDIO驱动系列之二 ---- host注册过程(一)
  11. position:sticky 定位 position:fixed
  12. django框架中的中间件
  13. 浅谈SpringMVC执行过程
  14. visual Studio 2017 扩展开发(三)《绑定快捷键到菜单项》
  15. cookie 和 session区别
  16. MySQL导出数据字典
  17. vue用组件构建应用
  18. js 取一个对象的长度,取出来的是undefined,自己写的一个计算长度的函数解决了。
  19. python:数据类型
  20. Scrum Meeting Beta - 9

热门文章

  1. Django3.2边学边记—Adimn站点管理
  2. 防刷功能的实现(thinkphp5)
  3. Superedge的新特性和未来之路
  4. SSA
  5. 三千字介绍Redis主从+哨兵+集群
  6. Cookie实现是否第一次登陆/显示上次登陆时间
  7. STAR-CCM+使用教程(开坑)
  8. C#开发BIMFACE系列40 服务端API之模型集成
  9. Linux下iptables学习笔记
  10. Java JDK环境变量如何配置?Java基础!