• poj 2229 DP


    Sumsets

    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

    思路:用完全背包的方法做,状态转移方程:dp[j]+=dp[j-v](j>=v)
    代码:
     1 #include "cstdio"
     2 #include "algorithm"
     3 #include "cstring"
     4 #include "queue"
     5 #include "cmath"
     6 #include "vector"
     7 #include "map"
     8 #include "stdlib.h"
     9 #include "set"
    10 typedef long long ll;
    11 using  namespace std;
    12 const int N=1e6+5;
    13 const int Mod=1e9;
    14 #define db double
    15 int n;
    16 int  dp[N];
    17 void solve(){
    18     memset(dp,0,sizeof(dp));
    19     dp[0]=dp[1]=1;
    20     for(int i=0;i<22;i++){
    21         int v=1<<i;
    22         for(int j = 2;j<=N;j++){
    23             if(j>=v) dp[j]+=dp[j-v];
    24             while (dp[j]>=1000000000) dp[j]-=1000000000;
    25         }
    26     }
    27 }
    28 int main(){
    29     solve();
    30     while(scanf("%d",&n)==1){
    31         printf("%d
    ",dp[n]);
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    Mysql 删除表
    Mysql 创建表
    Mysql left join
    Qt(Mac) 进程的启动
    Mysql update
    Mysql insert
    Mysql select
    Mysql INNER JOIN
    Mysql 别名
    Mysql 排序
  • 原文地址:https://www.cnblogs.com/mj-liylho/p/6532638.html
Copyright © 2020-2023  润新知