状态很差脑子不清醒了,柿子一直在推错。。。。

。。。

不难发现这个题实际上是一个完全背包

问题在于n太大了,相应的有质数的数量不会超过7个

假设要求sigema(1~plen)i pi*ci=n 的方案数

令xi=ci/(S*pi),yi=ci%(S/pi),注意yi<S/pi

则等价于sigema(1~plen)i S*xi+yi*pi=n

若令sigema(1~plen)i xi=m,则sigema(1~plen)yi*pi=n-m*S

n-m*S=sigema(1~plen)yi*pi<plen*S,可推出n/S-plen<m<=n/S

此时plen有用了,我们可以枚举m,那么对于x的方案用插板法得C(m+plen-1,plen-1),对于y直接背包plen*S,朴素的做法是O(plen*(plen*S)*S/pi)的,随便优化下就可以把S/pi去掉了,不过要稍微注意yi的限制。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int _=1e2;
const int maxn=**1e6+_;
const LL mod=1e9+; int plen,p[];
bool divi(int n)
{
plen=;
for(int i=;i*i<=n;i++)
if(n%i==)
{
p[]+=i;p[++plen]=i;n/=i;
if(n%i==)return false;
}
if(n!=)p[]+=n,p[++plen]=n;
return true;
} LL inv[];
void yu(){inv[]=;for(int i=;i<=plen;i++)inv[i]=inv[mod%i]*(mod-mod/i)%mod;}
LL C(LL n,LL m)
{
LL ret=;
for(int i=;i<=m;i++)
{
ret=ret*(n%mod)%mod*inv[i]%mod; n--;
}
return ret;
}
LL f[][maxn]; int now;
void DP(int S)
{
int li=S*plen;
now=,f[now][]=;
for(int i=;i<=plen;i++)
{
now^=;
for(int j=;j<li;j++)
{
f[now][j]=;
if(j-p[i]>=)f[now][j]=(f[now][j]+f[now][j-p[i]])%mod;
f[now][j]=(f[now][j]+f[now^][j])%mod;
if(j>=S/p[i]*p[i])f[now][j]=(f[now][j]-f[now^][j-S/p[i]*p[i]]+mod)%mod;
}
}
} int main()
{
freopen("3.in","r",stdin);
freopen("a.out","w",stdout);
int S,Q;
scanf("%d%d",&S,&Q);
if(!divi(S)){while(Q--)puts("");return ;}
yu();DP(S);
while(Q--)
{
LL n;
scanf("%lld",&n);n-=p[];
if(n<){puts("");continue;} LL ans=;
for(LL m=max(0LL,n/S-plen+);m<=n/S;m++)
{
ans=(ans+C(m+plen-,plen-)*f[now][n-m*S])%mod;
}
printf("%lld\n",ans);
} return ;
}

bzoj3462: DZY Loves Math II的更多相关文章

  1. BZOJ3462 DZY Loves Math II(动态规划+组合数学)

    容易发现这是一个有各种玄妙性质的完全背包计数. 对于每个质数,将其选取个数写成ax+b的形式,其中x=S/pi,0<b<x.那么可以枚举b的部分提供了多少贡献,多重背包计算,a的部分直接组 ...

  2. BZOJ3462 DZY Loves Math II 【多重背包 + 组合数】

    题目 输入格式 第一行,两个正整数 S 和 q,q 表示询问数量. 接下来 q 行,每行一个正整数 n. 输出格式 输出共 q 行,分别为每个询问的答案. 输入样例 30 3 9 29 1000000 ...

  3. [bzoj3462]DZY Loves Math II (美妙数学+背包dp)

    Description Input 第一行,两个正整数 S 和 q,q 表示询问数量. 接下来 q 行,每行一个正整数 n. Output 输出共 q 行,分别为每个询问的答案. Sample Inp ...

  4. bzoj 3462: DZY Loves Math II

    3462: DZY Loves Math II Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 211  Solved: 103[Submit][Sta ...

  5. BZOJ 3462 DZY Loves Math II ——动态规划 组合数

    好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划 ...

  6. DZY Loves Math II:多重背包dp+组合数

    Description Input 第一行,两个正整数 S 和 q,q 表示询问数量.接下来 q 行,每行一个正整数 n. Output 输出共 q 行,分别为每个询问的答案. Sample Inpu ...

  7. DZY Loves Math II

    简要题面 对于正整数 \(S, n\),求满足如下条件的素数数列 \((p_1,p_2,\cdots,p_k)\)(\(k\) 为任意正整数) 的个数: \(p_1\le p_2\le\cdots\l ...

  8. DZY Loves Math系列

    link 好久没写数学题了,再这样下去吃枣药丸啊. 找一套应该还比较有意思的数学题来做. [bzoj3309]DZY Loves Math 简单推一下. \[\sum_{i=1}^n\sum_{j=1 ...

  9. [BZOJ] DZY Loves Math 系列 I && II

    为了让自己看起来有点事干 ,做个套题吧..不然老是东翻翻西翻翻也不知道在干嘛... \(\bf 3309: DZY \ Loves \ Math\) 令 \(h=f*\mu\) 很明显题目要求的就是\ ...

随机推荐

  1. centos 7如何配置网络、网卡、ip命令

    Linux网络相关配置文件 Linux网络配置相关的文件根据不同的发行版目录名称有所不同,但大同小异,主要有似下目录或文件. (1)/etc/hostname:主要功能在于修改主机名称. (2)/et ...

  2. 【Hihocoder1034】毁灭者问题(splay,树状数组)

    题意: 假设你拥有 n 个魔法单位,他们从左到有站在一行,编号从 1 到 n. 每个单位拥有三项属性: si: 初始法力. mi: 最大法力上限. ri: 每秒中法力回复速度. 现在你操纵一个毁灭者, ...

  3. vs2005做的留言本——天轰川下载

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] 这个虽然单纯是个留言本,但是在功能上我都使用了尽量不重复的解决方法,所以我自认为非常适合入门级的朋友看,而且用了我 ...

  4. Codeforces Round #291 (Div. 2) D. R2D2 and Droid Army [线段树+线性扫一遍]

    传送门 D. R2D2 and Droid Army time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  5. 系统进程的Watchdog

    编写者:李文栋 /rayleeya http://rayleeya.iteye.com/blog/1963408 3.1 Watchdog简介 对于像笔者这样没玩过硬件的纯软程序员来说,第一次看到这个 ...

  6. 使用Sharesdk实现第三方平台登录(qq,新浪微博)

    首先到sharesdk开放píng台下载demo ,以下要用到的文件来自于 simple里面 第一步:导入官方的jar包    第二步:添加ShareSDK.xml文件并修改相关píng台key  第 ...

  7. 解决 Mac OS X Retina 屏幕显示环境下 jEdit 字体模糊的方法

    Mac OS X Retina 屏幕显示环境下,字体非常清晰.但是 jEdit 仍然很模糊,虽然 jEdit 用的是 Java,但这并不是理由.因为诸如 NetBeans 以及 IntelliJ ID ...

  8. 新闻:融资600万 他用一套系统优化15大HR工作场景 精简入转调离 月开通214家 | IT桔子

    新闻:融资600万 他用一套系统优化15大HR工作场景 精简入转调离 月开通214家 | IT桔子 功劳说不上

  9. [置顶] MySQL -- 创建函数(Function

    目标 如何在MySQL数据库中创建函数(Function) 语法 CREATE FUNCTION func_name ( [func_parameter] ) //括号是必须的,参数是可选的 RETU ...

  10. gdb源码安装,指定使用的python版本

    gdb调试python的时候,需要根据不同的python版本2.6.2.7.3.x安装相应的gdb: 如何指定关联的python版本? 下面gdb源码,解压后,进入目录: ./configure -h ...