POJ2229 递推
2017-07-04 14:32
316 查看
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
=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
=dp[n-1] n位偶数时 dp
=dp[n-2]+dp[n-2];
AC代码
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
=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
=dp[n-1] n位偶数时 dp
=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 ); } }
相关文章推荐
- POJ2229 Sumsets 【递推】
- POJ 2229 Sumsets(dp 递推)
- [USACO2005][poj2229]Sumsets(递推)
- poj 2229 Sumsets 递推
- poj 2229 Sumsets 【完全背包 or 递推】
- POJ 2229 Sumsets(递推,找规律)
- POJ 2229 Sumsets 递推
- Sumsets(POJ 2229 DP)
- POJ2229-Sumsets-完全背包
- poj 2229 2的次方个数dp
- poj 3734 Blocks (递推,矩阵快速幂)
- DP 之 poj 2229
- POJ2229 Sumsets
- poj1664——放苹果(递推)
- POJ 2081 Recaman's Sequence (递推)
- POJ 2182 Lost Cows (递推)
- poj 2479 Maximum sum(递推)
- poj 2229 Sumsets (DP)
- POJ 2229-Sumsets(把n拆分为2的幂相加的拆分种数)
- poj1579 递推