• LOJ6089 小Y的背包计数问题


    Link
    不大于(sqrt n)的物品直接暴力多重背包。
    剩下的完全背包,设(f_{i,j})表示选了(i)个大物品总重量为(j)的方案数,转移就是(g_{i,j}=g_{i,j-i}+g_{i-1,j-sqrt n-1})

    #include<cstdio>
    const int N=100007,T=400,P=23333333;
    int f[T][N],s[T][T],g[T][N];
    void inc(int&a,int b){a+=b-P,a+=a>>31&P;}
    int sub(int a,int b){return a-=b,a+=a>>31&P;}
    int main()
    {
        int n,T=316,ans=0;scanf("%d",&n),f[0][0]=g[0][0]=1;
        for(int i=1;i<=T;++i) for(int j=0;j<=n;++j) inc(s[i][j%i],sub(j>=i? f[i-1][j-i]:0,j>=i*i+i? f[i-1][j-i*i-i]:0)),inc(f[i][j]=f[i-1][j],s[i][j%i]);
        for(int i=1;i<=T;++i) for(int j=T+1;j<=n;++j) inc(g[i][j]=g[i-1][j-T-1],g[i][j-i]),inc(ans,1ll*g[i][j]*f[T][n-j]%P);
        printf("%d",(ans+f[T][n])%P);
    }
    
  • 相关阅读:
    依赖注入与控制反转
    Java NIO(三)
    Java NIO(二)
    Java NIO(一)
    Jetty 的基本架构
    spring IOC
    java代理
    spring AOP
    linux 添加用户并授权可以操作文件夹
    Centos6.5 yum 安装jdk1.8
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12693370.html
Copyright © 2020-2023  润新知