这题我一开始就想到数位dp了,其实好像也不是很难,但是自己写不出来。。。常规套路,f[i][j][k][t],从后往前填数,i位,j代表是否卡着上沿,k是现在有几个1,t是想要有几个。记忆化搜索就ok啦!

题干:

题目背景

众所周知,花神多年来凭借无边的神力狂虐各大 OJ、OI、CF、TC …… 当然也包括 CH 啦。
题目描述 话说花神这天又来讲课了。课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了。 花神的题目是这样的:设 sum(i)\text{sum}(i)sum(i) 表示 iii 的二进制表示中 的个数。给出一个正整数 NNN ,花神要问你 ∏i=1Nsum(i)\prod_{i=}^{N}\text{sum}(i)∏i=1N​sum(i) ,也就是 sum()∼sum(N)\text{sum}()\sim\text{sum}(N)sum()∼sum(N) 的乘积。
输入输出格式
输入格式: 一个正整数 N。 输出格式: 一个数,答案模 的值。 输入输出样例
输入样例#: 复制 输出样例#: 复制 说明 对于 % 的数据,N≤^

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define duke(i,a,n) for(register int i = a;i <= n;++i)
#define lv(i,a,n) for(register int i = a;i >= n;--i)
#define clean(a) memset(a,0,sizeof(a))
const int INF = << ;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{
char c;
bool op = ;
while(c = getchar(), c < '' || c > '')
if(c == '-') op = ;
x = c - '';
while(c = getchar(), c >= '' && c <= '')
x = x * + c - '';
if(op) x = -x;
}
template <class T>
void write(T x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar('' + x % );
}
const int N = ;
const int mod = ;
ll n;
int x[N],cnt = ;
ll f[N][][N][N];
ll ans[N];
ll qpow(ll a,ll b)
{
ll tot = ;
while(b)
{
if(b & )
{
tot *= a;
tot %= mod;
}
a *= a;
a %= mod;
b >>= ;
}
return tot;
}
ll _f(int cur,int up,int tmp,int d)
{
if(!cur)
return tmp == d;
if(~f[cur][up][tmp][d])
return f[cur][up][tmp][d];
int lim = up ? x[cur] : ;
ll ret = ;
for(int i = ;i <= lim;++i)
{
ret += _f(cur - ,up && i == lim,tmp + (i == ),d);
}
return f[cur][up][tmp][d] = ret;
}
ll solve()
{
while(n)
{
x[++cnt] = n & ;
n >>= ;
}
for(int i = ;i <= ;i++)
{
memset(f,-,sizeof(f));
ans[i] = _f(cnt,,,i);
}
ll ret = ;
for(int i = ;i <= ;++i)
{
ret = ret * qpow(i,ans[i]) % mod;
}
}
int main()
{
read(n);
printf("%lld\n",solve());
}

最新文章

  1. Apache RewriteHTTPToHTTPS
  2. Linux grep与正则表达式
  3. 转: Ext拖拽分析
  4. 关于跨域响应头Access-Control-Allow-Headers的一些说明
  5. [百度空间] ld: add library file reference by path &amp; file name
  6. poj 2349(最小生成树应用)
  7. 服务--web服务
  8. 64位Python安装PIL
  9. C#中异步和多线程的区别
  10. java cpu缓存
  11. PHP学习笔记十六【方法】
  12. jquery动态改变背景颜色插件
  13. python中关于字符串的操作
  14. 简单了解Hibernate
  15. 洛谷 [P2774] 方格取数问题
  16. DAY12、装饰器
  17. 从Excel表中导入数据时日期格式的验证问题解决
  18. 漏洞预警:Linux内核9年高龄的“脏牛”0day漏洞
  19. centos5&amp;6的启动过程
  20. RabbitMQ 死信队列 延时

热门文章

  1. [luoguP1227] [JSOI2008]完美的对称(sort)
  2. 《TCP/IP详解卷1:协议》——第4章 ARP:地址解析协议(转载)
  3. PatentTips - Solid State Memory Wear Leveling
  4. php除法的知识点
  5. Python数据分析常用的库总结
  6. 洛谷——P1951 收费站_NOI导刊2009提高(2)
  7. Java fail-fast 与 fail-safe 机制对比
  8. Spring基于Java的JSR-250注解
  9. weblogic集群的资料
  10. 转: 将Eclipse代码导入到AndroidStudio的两种方式