HDOJ 4651 整数拆分
来源:互联网 发布:很红的网络翻唱歌曲 编辑:程序博客网 时间:2024/05/16 18:27
这题显然是数学题,整数拆分问题,要用到五边形定理。
其中,f(n)=求和((-1)^(k-1)*f(n-k*(3*k-1)/2))+求和((-1)^(k-1)*f(n-k*(3*k+1)/2)),其中保证k>=1,且n-k*(3*k-1)/2>=0,n-k*(3*k+1)/2>=0, 并且f(0)=1。
关于如何推出这个公式的,我就不清楚了。
#include <iostream>#include <fstream>#include <algorithm>#include <cstring>using namespace std;#define N 100000#define T 1000000007long long p[N+5];int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); p[0] = p[1] =1; for (int i=2;i<=N;i++){ int k=1; int flag=1; while ((k*(3*k-1))/2<=i){ p[i]+=flag*p[i-(k*(3*k-1))/2]; if (p[i]>=T) p[i]%=T; if (p[i]<0) p[i]+=T; flag*=-1; k++; } k= flag = 1; while ((k*(3*k+1))/2<=i){ p[i]+=flag*p[i-(k*(3*k+1))/2]; if (p[i]>=T) p[i]%=T; if (p[i]<0) p[i]+=T; flag*=-1; k++; } // cout<<p[i]<<','; } int n; cin>>n; for (int i=0;i<n;i++){ int j; scanf("%d",&j); printf("%d\n",p[j]); } return 0;}
- HDOJ 4651 整数拆分
- (数学,拆分数字,找规律)整数对-HDOJ
- 整数拆分
- 整数拆分
- 整数拆分
- 整数拆分
- 整数拆分
- 整数拆分
- 整数拆分
- 整数拆分
- 拆分整数
- 整数拆分
- 整数拆分
- 整数拆分
- 整数拆分
- 整数拆分
- hdu 4651 (整数拆分 公式题)
- 整数拆分hdu 4651 && hdu 4658
- C语言枚举类型enum
- cocos2dx CCLayer转换不明确
- 查看udp 统计信息
- hdu-1298-T9
- Qt4.8.4 + VS2008开发的学习
- HDOJ 4651 整数拆分
- BeginPaint&&GetDc
- 重写、覆盖、重载、隐藏、多态几个概念的区别分析
- PasToHtml
- 调整数组顺序使奇数位于偶数前面
- Rebar:Erlang构建工具
- Counting Objects in C++
- LOG4CPLUS_INFO_FMT未声明问题
- jquery easyui combobox 值的判断和处理,推敲了半天才搞通的,贴出来记一下