点此看题面

大致题意: 设\(sum(i)\)表示\(i\)二进制中1的个数,请求出\(\prod_{i=1}^n sum(i)\)。

数位\(DP\)

很显然,这是一道数位\(DP\)题。我们可以先将\(n\)转化为二进制,然后DP预处理,最后求答案。

设\(f[i][j]\)表示当前数字的1~\(i\)位中共有\(j\)个1,这可以得到转移方程:

f[i][j]=f[i-1][j]+f[i-1][j-1];

初始时将全部\(f[i][0]\)赋值为1。

然后我们就能发现,这样子我们就相当于求出了一个杨辉三角形

最后,再对\(sum(i)\)的每一种可能值依次进行操作,求出有多少个数在二进制下有\(i\)个1,再用快速幂将其累乘即可求出答案。

代码

#include<bits/stdc++.h>
#define LL long long
#define YKH 10000007
using namespace std;
LL n,ans=1ll,tot,num[100],f[100][100];
inline char tc()
{
static char ff[100000],*A=ff,*B=ff;
return A==B&&(B=(A=ff)+fread(ff,1,100000,stdin),A==B)?EOF:*A++;
}
inline void read(LL &x)
{
x=0;LL f=1;char ch;
while(!isdigit(ch=tc())) f=ch^'-'?1:-1;
while(x=(x<<3)+(x<<1)+ch-'0',isdigit(ch=tc()));
x*=f;
}
inline void write(LL x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline LL quick_pow(LL x,LL y)//快速幂
{
LL res=1;
while(y)
{
if(y&1) (res*=x)%=YKH;
(x*=x)%=YKH,y>>=1;
}
return res;
}
inline LL doing(LL x)//求出二进制下含有i个1的数的个数,利用了先前求出的杨辉三角形
{
LL sum=0;//统计个数
for(register LL i=tot;i>0;--i)
{
if(num[i]) sum+=f[i-1][x--];//判断该位是否为1
if(x<0) return sum;//如果x小于0,返回sum
}
return sum;
}
int main()
{
register LL i,j;LL w;
for(read(n),w=n+1,tot=0;w;num[++tot]=w&1,w>>=1);
for(i=0;i<=tot;++i) f[i][0]=1;
for(i=1;i<=tot;++i)//预处理出一个杨辉三角形
for(j=1;j<=i;++j)
f[i][j]=f[i-1][j]+f[i-1][j-1];
for(i=1;i<=tot;++i)
(ans*=quick_pow(i,doing(i)))%=YKH;//求出答案,并累乘
return write(ans),0;
}

最新文章

  1. Fragment
  2. 特殊文件: /dev/null和/dev/tty
  3. 修改SQL SERVER表,并添加说明
  4. Nginx的静态资源缓存以及压缩
  5. How to: 使用 数据流 实现生产者-消费者模式
  6. JS判断终端设备跳转PC端、移动端相应的URL
  7. maven常见错误
  8. 大家一起和snailren学java-(六)复用类
  9. DDL之操作表
  10. IOS 多级列表展开控件
  11. IIS实现301重定向
  12. [Bootstrap]概述
  13. 安装sinopia-ldap
  14. 【转】Installing OpenCV on Debian Linux
  15. libvirtsAPI
  16. [置顶] 遇到难题(bug)的解决方法心得
  17. 解决clipboard手机端无法复制的一种思路
  18. Windows10 Build 18298 桌面显示计算机(此电脑)
  19. BOM简介
  20. 异常解决 Unable to write generated Java files for schemas: null

热门文章

  1. 51nod1035(循环节)
  2. windows cmd命令 mkdir生成多个文件bug问题
  3. 记一次工作中的小BUG
  4. JavaScript for impatient programmers
  5. Extending JMeter – Creating Custom Config Element – Property File Reader
  6. ssl加密
  7. PartTime__学习辅助软件_20161025
  8. C# 或与非
  9. 执行命令npm install XXX后仍然提示 Cannot find Module XXX
  10. python基本数据类型,int,bool,str