zoukankan      html  css  js  c++  java
  • poj 2229 Sumsets

    http://poj.org/problem?id=2229

    题意:把一个整数拆分为2的幂。

    当n为奇数时dp[n]=dp[n-1];因为每总都加1,所以总数一样。当n为偶数时,分为有1和无1,有1.拆一个1,就变成奇数了,无1,就等于dp[n/2];

    Sumsets
    Time Limit: 2000MS   Memory Limit: 200000K
    Total Submissions: 14180   Accepted: 5637

    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

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int m=1000000000;
    int dp[1000000];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(dp,0,sizeof(dp));
            int i;
          dp[1]=1;
          dp[2]=2;
         for(i=3;i<=n;i++)
          {
              if(i%2==0)
                 { 
                  dp[i]=dp[i/2]+dp[i-2];
                  dp[i]%=m;
                }
             else
               {
                     dp[i]=dp[i-1];
                     dp[i]%=m;
               }
          }
          printf("%d
    ",dp[n]%m);
    
        }
        return 0;
    }
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int m=1000000000;
    int dp[1000000];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(dp,0,sizeof(dp));
            int i;
          dp[1]=1;
          dp[2]=2;
         for(i=3;i<=n;i++)
          {
              if(i%2==0)
                 { 
                  dp[i]=dp[i/2]+dp[i-2];
                  dp[i]%=m;
                }
             else
               {
                     dp[i]=dp[i-1];
                     dp[i]%=m;
               }
          }
          printf("%d
    ",dp[n]%m);
    
        }
        return 0;
    }
  • 相关阅读:
    between…and…用法
    as用法
    as the saying goes 常言道
    share with用法
    know about用法
    *[topcoder]LCMSetEasy
    5生鲜超市(商品列表页功能,restful api基础以及vue项目结构介绍,drf的APIView、GenericView、viewsets和route)
    1生鲜超市(项目介绍)
    11生鲜超市(首页、商品数量、缓存和限速功能开发)
    Aplix助NEC/松下Linux手机平台建设
  • 原文地址:https://www.cnblogs.com/cancangood/p/4504476.html
Copyright © 2011-2022 走看看