1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
Help FJ count all possible representations for a given integer N (1 <= N <= 1,000,000).
7
Sample Output
6
1.可以通过查找规律发现:
n: ans:
1 1
2 2
3 2
4 4
5 4
6 6
7 6
8 10
9 10
10 14
11 14
12 20
...... ......
if(n%2!=0) a[n]=a[n-1]
if(n%2==0) a[n]=a[n-2]+a[n/2];
2. 因为有这个公式 a[n]=a[n-2]+a[n/2];,所以n满足大于等于2,故而,要对a[0],a[1]初始化。
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
#define MOD 1000000000;
int a[1000010];
void init()
{
a[0]=a[1]=1;
for(int i=2;i<1000010;i++)
{
if(i%2)
a[i]=a[i-1];
else
{
a[i]=a[i-2]+a[i/2];
a[i]%=MOD;
}
}
}
int main()
{
init();
int n;
cin>>n;
printf("%d\n",a[n]);
return 0;
}