poj 2229

Sumsets
 
   
Time Limit: 2000MS   Memory Limit: 200000K
Total Submissions: 6980   Accepted: 2763

Description

Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 7:

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).

Input

A single line with a single integer, N.

Output

The number of ways to represent N as the indicated sum. Due to the potential huge size of this number, print only last 9 digits (in base 10 representation).

Sample Input

7

Sample Output

6

Source

难得写次递归,vs2008居然爆掉了》Stack overflow》,郁闷了下
据说是栈溢出,不清楚是什么情况

  
    
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<math.h>

int f[1000002];

int find(int num)

{

	if(f[num])

		return f[num];

	if(num==0)

		return 0;

	if(num%2==0)

		f[num]=(find(num-2)+find(num/2))%1000000000;

	else if(num%2==1)

		f[num]=find(num-1)%1000000000;

	return f[num];

}

int main()

{

	int n;

	memset(f,0,sizeof(f));

	f[1]=1;

	f[2]=2;

	while(scanf("%d",&n)!=EOF)

	{

		printf("%d\n",find(n));

	}

	return 0;

}

你可能感兴趣的:(poj)