POJ2229 递推

来源:互联网 发布:java读取文本内容 编辑:程序博客网 时间:2024/06/04 20:06

Sumsets
Time Limit: 2000MS Memory Limit: 200000K
Total Submissions: 19030 Accepted: 7436
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

解题思路
因为每个数量为2的整数幂 所以 当n=基数的时候 dp[n]=dp[n-1];
先写出前面的几个数字的种数
dp[1]=1;
dp[2]=2;
dp[3]=2;
dp[4]=4;
dp[5]=4;
dp[6]=6;
dp[7]=6;

不难发现规律 n为基数时 dp[n]=dp[n-1] n位偶数时 dp[n]=dp[n-2]+dp[n-2];

AC代码

import java.util.Scanner;public class Main{    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner scan=new Scanner(System.in);        int dp[]=new int[1000005];        dp[1]=1;        dp[2]=2;        for(int i=3;i<=1000000;i++){            if(i%2!=0){                dp[i]=dp[i-1];            }            else{                dp[i]=dp[i-2]+dp[i/2];            }            if(dp[i]>1000000000){                dp[i]%=1000000000;            }        }        int n=scan.nextInt();        System.out.println(dp[n]);    }}
原创粉丝点击