OJ_1084 整数拆分
2014-02-20 15:35
309 查看
#include <iostream> #include <stdlib.h> #include <math.h> using namespace std; int a[1000002]={0}; const int key=1000000000; int getway(int n) { // if(a !=0)return a ; for(int i=1;i<=n;i++) { if(i==1&&a[i]==0) a[i]=i; else if((i&0x1)==1&&a[i]==0) a[i]=a[i-1]; else if((i&0x1)==0&&a[i]==0) a[i]=(a[i-1]%key+a[i/2]%key)%key; } return a ; } void func() { int n; while(cin>>n) { cout<<getway(n)<<endl; } } int main(int argc, char *argv[]) { //printf("Hello, world\n"); func(); return 0; }
记录
注意:
%运算的性质有(a+b)%c=(a%c+b%c)%c
题目描述:
一个整数总可以拆分为2的幂的和,例如:
7=1+2+4
7=1+2+2+2
7=1+1+1+4
7=1+1+1+2+2
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
总共有六种不同的拆分方式。
再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。
用f(n)表示n的不同拆分的种数,例如f(7)=6.
要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。
输入:
每组输入包括一个整数:N(1<=N<=1000000)。
输出:
对于每组数据,输出f(n)%1000000000。
样例输入:
7
样例输出:
6
相关文章推荐
- 九度oj-1084-整数拆分
- 九度OJ 1084: 整数拆分
- 九度OJ 1084 整数拆分
- 九度OJ 1084 整数拆分
- 九度OJ 1084 整数拆分
- 九度 oj 题目1084:整数拆分
- 【杭电oj】1084 - What Is Your Grade?(排序,迷之WA)
- 杭电OJ—— 1084 What Is Your Grade?
- 九度oj 1084
- 九度[1084]整数拆分
- 杭电OJ—— 1084 What Is Your Grade?
- 九度OJ 题目1084:整数拆分
- 九度OJ题目1084:整数拆分
- 九度1084 整数拆分
- 九度OJ 1084:整数拆分 (递归)
- 题目1084:整数拆分
- 南邮 OJ 1084 A + B Problem (1)
- <九度 OJ>题目1084:整数拆分
- 九度OJ 1084 整数拆分
- [OJ]整数拆分