hdu 4651 (整数拆分 公式题)
2013-08-07 09:48
387 查看
例如 5可拆分为 :
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+4
5=1+2+2
5=2+3
5=5
共7种 ;
1. #include <cstdio>
2. #include <cstring>
3. #include <algorithm>
4. #define LL long long
5. #define INF 0x7fffffff
6. #define MOD 1000000007
7. #define M 100005
8.
9. using namespace std;
10.
11. int p[M];
12. LL ans[M];
13. void presolve()
14. {
15. int c = 0;
16. for(int i = 1; ; i++)
17. {
18. p[c++] = (3*i*i-i)/2;
19. p[c++] = (3*i*i+i)/2;
20. if((3*i*i-i)/2>M) break;
21. }
22. }
23. LL solve(int n)
24. {
25. if(ans
) return ans
;
26. LL temp = 0;
27. for(int i = 0; p[i] <= n; ++i)
28. {
29. if((i/2)&1) temp -= solve(n-p[i]);
30. else temp += solve(n-p[i]);
31. }
32. if(temp<0) temp+=(-temp/MOD+1)*MOD;
33. return ans
= temp%MOD;
34. }
35. int main ()
36. {
37. int t, n;
38. scanf("%d",&t);
39. presolve();
40. memset(ans,0,sizeof(ans));
41. while(t--)
42. {
43. scanf("%d",&n);
44. ans[0] = 1; ans[1] = 1; ans[2] = 2;
45. for(int i = 3; i <= n; ++i)
46. solve(i);
47. printf("%I64d\n",solve(n));
48. }
49. return 0;
50. }
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+4
5=1+2+2
5=2+3
5=5
共7种 ;
1. #include <cstdio>
2. #include <cstring>
3. #include <algorithm>
4. #define LL long long
5. #define INF 0x7fffffff
6. #define MOD 1000000007
7. #define M 100005
8.
9. using namespace std;
10.
11. int p[M];
12. LL ans[M];
13. void presolve()
14. {
15. int c = 0;
16. for(int i = 1; ; i++)
17. {
18. p[c++] = (3*i*i-i)/2;
19. p[c++] = (3*i*i+i)/2;
20. if((3*i*i-i)/2>M) break;
21. }
22. }
23. LL solve(int n)
24. {
25. if(ans
) return ans
;
26. LL temp = 0;
27. for(int i = 0; p[i] <= n; ++i)
28. {
29. if((i/2)&1) temp -= solve(n-p[i]);
30. else temp += solve(n-p[i]);
31. }
32. if(temp<0) temp+=(-temp/MOD+1)*MOD;
33. return ans
= temp%MOD;
34. }
35. int main ()
36. {
37. int t, n;
38. scanf("%d",&t);
39. presolve();
40. memset(ans,0,sizeof(ans));
41. while(t--)
42. {
43. scanf("%d",&n);
44. ans[0] = 1; ans[1] = 1; ans[2] = 2;
45. for(int i = 3; i <= n; ++i)
46. solve(i);
47. printf("%I64d\n",solve(n));
48. }
49. return 0;
50. }
相关文章推荐
- HDU-4651 Partition 整数拆分,递推
- hdu 4651 Partition 整数划分+公式
- HDU 1028 Ignatius and the Princess III 整数的拆分
- hdu 1028 Ignatius and the Princess III(整数拆分较大数据量模板)
- hdu_4651_Partition(公式)
- HDU 4671 - Partition(2013MUTC5-1009)(整数拆分,五边形数定理)
- HDU-4651 整数分解(生成函数)
- hdu 1028 Ignatius and the Princess III(整数拆分,母函数或dp)
- hdu_4651_Partition(公式)
- hdu 4651 Partition,公式题,维基百科上搜五边形定理即可
- hdu 4651(求整数的组合数,五边形定理)
- Hdu 1028 Ignatius and the Princess III(整数拆分问题,DP)
- HDU4651+数学公式
- HDU 1028-Ignatius and the Princess III(拆分整数-母函数-无限次)
- HDU 4651 Partition(整数划分)
- hdu 5230 ZCC loves hacking(整数拆分的变形+前缀和)
- HDU 1028 整数拆分问题 Ignatius and the Princess III
- HDU 4651 数论 partition 求自然数的拆分数
- hdu 1028 Ignatius and the Princess III 好水的整数拆分,零数可重复
- HDU 1028 Ignatius and the Princess III【整数拆分】