[BZOJ]3209: 花神的数论题 数位DP
来源:互联网 发布:fm2016中文版for mac 编辑:程序博客网 时间:2024/06/05 08:20
Description
背景
众所周知,花神多年来凭借无边的神力狂虐各大 OJ、OI、CF、TC …… 当然也包括 CH 啦。
描述
话说花神这天又来讲课了。课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了。
花神的题目是这样的
设 sum(i) 表示 i 的二进制表示中 1 的个数。给出一个正整数 N ,花神要问你
派(Sum(i)),也就是 sum(1)—sum(N) 的乘积。
题解:
问题转化为小于等于N的数中,二进制中1的个数为某个值的方案数。直接数位DP,
代码:
#include<bits/stdc++.h>using namespace std;#define LL long longconst int Maxn=55;const LL mod=10000007LL;LL n;int a[Maxn],b[Maxn],l=0;LL f[Maxn][Maxn][2];//前i位j个1的方案数 LL Pow(LL x,LL y){ if(y==0)return 1LL; if(y==1)return x%mod; LL t=Pow(x,y>>1),ans=t*t%mod; if(y&1)ans=ans*x%mod;return ans;}int main(){ scanf("%lld",&n); LL t=n; while(t)b[++l]=(t&1),t>>=1; for(int i=1;i<=l;i++)a[i]=b[l-i+1]; for(int i=1;i<=l;i++) for(int j=0;j<=i;j++) { f[i][j][0]=f[i][j][1]=0; if(a[i]==1) { f[i][j][0]+=f[i-1][j][0]+f[i-1][j][1]; if(j)f[i][j][0]+=f[i-1][j-1][0]; if(j)f[i][j][1]+=f[i-1][j-1][1]; } else { f[i][j][0]+=f[i-1][j][0]; if(j)f[i][j][0]+=f[i-1][j-1][0]; f[i][j][1]+=f[i-1][j][1]; } } LL ans=1; for(int i=1;i<=l;i++)ans=ans*Pow((LL)(i),f[l][i][0]+f[l][i][1])%mod; printf("%lld",ans);}
阅读全文
1 0
- [数位dp] bzoj 3209 花神的数论题
- BZOJ 3209 花神的数论题 数位DP+数论
- BZOJ 3209 花神的数论题 数位DP
- BZOJ 3209 花神的数论题 (数位DP)
- bzoj 3209 花神的数论题(数位dp)
- bzoj 3209: 花神的数论题 数位dp
- [数位DP] BZOJ 3209 花神的数论题
- BZOJ 3209: 花神的数论题 (数位dp)
- bzoj 3209: 花神的数论题 (数位DP)
- BZOJ 3209: 花神的数论题 数位DP
- BZOJ 3209 花神的数论题 数位dp
- [BZOJ]3209: 花神的数论题 数位DP
- HYSBZ 3209 花神的数论题(数位dp)
- BZOJ3209 花神的数论题(数位dp)
- 【bzoj3209】【花神的数论题】【数位dp+快速幂】
- [BZOJ3209]花神的数论题(数位dp)
- bzoj3209 花神的数论题 数位DP
- BZOJ 3209(花神的数论题-数位统计+1,被数据范围坑了)
- synchronized 解析使用
- webview/h5跳转到app的指定activity
- 表单自动定位到出错的位置处
- 长连接与短连接区别
- 10W年薪和30W+年薪的产品经理差距在哪?
- [BZOJ]3209: 花神的数论题 数位DP
- 打走企业级落地微服务的拦路虎:数据
- html_ionic选项卡切换
- 1、通过 BitNami 部署 RedMine
- matplotlib绘制多个子图——subplot
- 分页类
- Oracle两种临时表的创建
- Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for
- 实验四之链栈