zoukankan      html  css  js  c++  java
  • SOJ 2785_Binary Partitions

    【题意】将一个数用二进制数表示,求一共有多少种表示方法。

    【分析】思路一:完全背包

    【代码】

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <cmath>
    #include<ctime>
    using namespace std;
    const int INF=0x3fffffff,maxn=1e5+40;
    const int mod=1000000;
    const int total=2000050;
    int f[total];
    int main (void)
    {
        int T,temp;
        f[0]=1;
        scanf("%d",&T);
        for(int i=0;i<=20;i++)//2^20<total<2^21
            for(int j=(1<<i);j<total;j++)
                 f[j]+=f[j-(1<<i)]%mod;
       while(T--)
       {
           scanf("%d",&temp);
           printf("%d
    ",f[temp]%mod);
       }
    }

    代码在zoj上AC,但是在soj上就一直TLE,改了好久才勉强AC........渣哭

    思路二:看了别人的博客,可以用递推思想,从二进制数的角度,任何一个数都可以由他前一个数+1表示,但如果该数n是偶数,那么他还可以由他的一半n/2表示,即将n/2左移一位

    【代码】

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <cmath>
    #include<ctime>
    using namespace std;
    const int INF=0x3fffffff,maxn=1e5+40;
    const int mod=1000000;
    const int total=2000050;
    int f[total];
    int main (void)
    {
        int T,num;
        f[0]=1;
        for(int i=0;i<total;i++)
        {
            if(i%2==0)
                f[i]=(f[i/2]+f[i-1])%mod;
            else
                f[i]=f[i-1]%mod;
        }
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&num);
            printf("%d
    ",f[num]);
        }
    }


  • 相关阅读:
    6.linux下指定项目使用特定jdk
    5.linux 执行shell报bad interpreter:No such file or directory错误
    定时任务基础版本
    同一台电脑安装两个jdk切换问题
    接口如何设计?安全如何保证?签名如何实现?防重如何实现?
    spring boot常见get 、post请求参数处理
    bat例子
    1.Volatile关键字详解
    1.linux目录
    解析xml报文,xml与map互转
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758885.html
Copyright © 2011-2022 走看看