POJ2229 Sumsets

Sumsets
Time Limit: 2000MS   Memory Limit: 200000K
Total Submissions: 26408   Accepted: 9992

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


刚学dp有点懵懵懂懂的,这个题是完全背包
递推式是: dp[j] = dp[j] + dp[j-c[i]]    0<=i<n  (n是可能会出现的2的指数序列的个数)    初始dp[0]=1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int max(int a, int b)
{
    return a>b ? a:b;
}

int dp[1000100];

int main()
{
    int c[20];
    c[0]=1;
    for(int i=1; i<20; i++)
        c[i] = c[i-1]*2;

    int n;
    while(scanf("%d", &n)!=-1)
    {
        dp[0]=1;

        for(int i=0; i<20; i++)
        {
            for(int j=c[i]; j<=n; j++)
            {
                dp[j] = (dp[j] + dp[j-c[i]])%1000000000;
            }
        }
        printf("%d\n", dp[n]);
    }
}

 

posted @ 2019-06-16 17:23  Dawn-bin  阅读(129)  评论(0编辑  收藏  举报