zoukankan      html  css  js  c++  java
  • 繁繁的数字 背包DP

    繁繁的数字 背包DP

    问一个数(n)有多少种二进制分解方案数

    (nle 10^5)

    如7有7=4+2+1=4+1+1+1=2+2+2+1=2+2+1+1+1=2+1+1+1+1+1=1+1+1+1+1+1+1,共6种方案

    一眼完全背包,将(2^0,2^1cdots)等看成(log_n)个物品,每个物品无限件,背包体积为(n)。然后求方案数套个计数DP即可。

    其他机房大佬都是找规律找出来的……

    #include <cstdio>
    #define MAXN 1000010
    #define MOD 1000000007
    #define ll long long
    using namespace std;
    int n;
    ll f[MAXN];
    int main()
    {
    	//freopen("number.in","r",stdin);
    	//freopen("number.out","w",stdout);
        scanf("%d", &n);
        f[0]=1;
        int tmp=0;
        for(int i=0;tmp=(1<<i),tmp<=n;++i){
            for(int j=0;j<=n;++j)
                if(j>=tmp)
                    f[j]=(f[j]+f[j-tmp])%MOD;
        }
        printf("%lld", f[n]);
        return 0;
    }
    
  • 相关阅读:
    传参问题-HttpMessageNotReableException
    排序03-简单排序法
    排序02-直接插入排序法
    排序01-冒泡排序法
    书摘
    CS229
    SLAM学习笔记
    形态学图像处理
    SLAM学习笔记
    SLAM学习笔记
  • 原文地址:https://www.cnblogs.com/santiego/p/11781394.html
Copyright © 2011-2022 走看看