HDU:4651 Partition
来源:互联网 发布:linux安装finger 编辑:程序博客网 时间:2024/06/06 03:36
经典的整数划分问题。
使用O(n^2)的办法必超时。
用这个公式可以递推出来。
注意n-k*(3*k-1)/2>=0,n-k*(3*k+1)/2>=0。
注意某些地方可能溢出int,所以用longlong比较安全。
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cmath>#include <vector>#include <queue>#include <map>#include <algorithm>#define ll long long#define INF 2139062143#define MOD 1000000007#define MAXN 100005using namespace std;int p[MAXN];void Init(){ p[0]=1; for(int i=1; i<=100000; ++i) { for(int k=1; ; ++k) { int a=i-(ll)k*(3*k-1)/2,b=i-(ll)k*(3*k+1)/2; if(a<0&&b<0) break; ll temp=0; if(a>=0) temp=(temp+p[a]+MOD)%MOD; if(b>=0) temp=(temp+p[b]+MOD)%MOD; if((k+1)&1) temp=(-temp+MOD)%MOD; p[i]=(p[i]+temp+MOD)%MOD; } }}int main(){ Init(); int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); printf("%d\n",p[n]); } return 0;}
0 0
- HDU 4651 Partition
- hdu 4651Partition
- HDU:4651 Partition
- HDU 4651 Partition
- hdu 4651 Partition
- hdu 4651 Partition(公式)
- HDU-4651-Partition
- hdu 4651 Partition 整数划分+公式
- hdu 4651 Partition 多校第五场
- hdu 4651 - Partition(五边形数定理)
- hdu - 4651 - Partition(五边形数定理)
- 【公式题】HDU 4651—— Partition
- hdu 4651 Partition 五边形数定理
- HDU 4651 Partition(整数划分)
- hdu 4651Partition(整数拆分模板题)
- hdu - 4602 《Partition》
- HDU 4602 Partition
- HDU 4062 Partition
- nginx 编译错误make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1make[2]: *** [objs/a
- 反向迭代器(rbegin,rend)
- PHP 读取文件
- Matlab电路原理应用——求解原本要求用电源等效变换解决的问题
- Asp.net中RegisterStartupScript方法的使用
- HDU:4651 Partition
- bombing:2证书认证系统设计与实现-pki技术介绍
- 函数指针的用法
- C++获取目录下的文件列表
- cf(396A)(质因子分解+挡板法+快速幂)
- D1、CIF格式介绍
- MongoDB数据库的安装、配置、主从同步、备份与恢复
- 【转】英文面试决胜关键
- 程序员word里面写代码