poj2229动态规划

来源:互联网 发布:go并发编程实战完整版 编辑:程序博客网 时间:2024/06/14 10:56
Sumsets
Time Limit: 2000MS Memory Limit: 200000KTotal Submissions: 20318 Accepted: 7930

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

思路:

1=1 1

2=1+1=2 2

3=1+1+1=1+2 2

4=1+1+1+1=1+1+2=2+2=4 4

5=1+1+1+1+1=1+1+1+2=1+2+2=1+4 4

6=1+1+1+1+1+1=1+1+1+1+2=1+1+2+2=1+1+4=2+2+2=2+4 6

7=1+1+1+1+1+1+1=1+1+1+1+1+2=1+1+1+2+2=1+1+1+4=1+2+2+2=1+2+4 6

8=1+1+1+1+1+1+1+1=1+1+1+1+1+1+2=1+1+1+1+2+2=1+1+1+1+4=1+1+2+2+2=1+1+2+4=2+2+2+2=2+2+4=4+4=8 10

由此可得知当i为奇数时等于前一个偶数

当i为偶数时等于 i-2+i/2的个数

#include<iostream>#include<stdio.h>using namespace std;long long a[1000005];int main(){long long N,i;a[1]=1,a[2]=2;for(i = 3 ; i <= 1000005 ; i ++){if(i%2==0)a[i]= a[i-2]+a[i/2];if(i%2!=0)a[i]= a[i-1];a[i]%=1000000000; }while(~scanf("%ld",&N))printf("%ld\n",a[N]);} 

原创粉丝点击