zoukankan      html  css  js  c++  java
  • [bzoj3209]花神的数论题【dp】

    【题目描述】

    Description

    背景
    众所周知,花神多年来凭借无边的神力狂虐各大 OJ、OI、CF、TC …… 当然也包括 CH 啦。
    描述
    话说花神这天又来讲课了。课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了。
    花神的题目是这样的
    设 sum(i) 表示 i 的二进制表示中 1 的个数。给出一个正整数 N ,花神要问你
    派(Sum(i)),也就是 sum(1)—sum(N) 的乘积。

    Input

    一个正整数 N。

    Output

    一个数,答案模 10000007 的值。

    Sample Input

    样例输入一

    3

    Sample Output

    样例输出一

    2

    HINT



    对于样例一,1*1*2=2;


    数据范围与约定


    对于 100% 的数据,N≤10^15

    Source

    【题解】

        数位dp裸题

    /* --------------
        user Vanisher
        problem bzoj-3209 
    ----------------*/
    # include <bits/stdc++.h>
    # define 	ll 		long long
    # define 	P 		10000007
    # define 	N 		110
    using namespace std;
    ll f[N][N][2],h[N],n,len;
    ll read(){
    	ll tmp=0, fh=1; char ch=getchar();
    	while (ch<'0'||ch>'9'){if (ch=='-') fh=-1; ch=getchar();}
    	while (ch>='0'&&ch<='9'){tmp=tmp*10+ch-'0'; ch=getchar();}
    	return tmp*fh;
    }
    ll mypow(ll x, ll y){
    	ll i=x; x=1;
    	while (y>0){
    		if (y%2==1) x=x*i%P;
    		i=i*i%P;
    		y/=2;
    	}
    	return x;
    }
    int main(){
    	n=read();
    	while (n>0){
    		h[++len]=n%2;
    		n/=2;
    	}
    	f[len][0][0]=1; f[len][1][1]=1;
    	for (ll i=len-1; i>=1; i--){
    		f[i][0][0]=f[i+1][0][0];
    		if (h[i]==1){
    			for (ll k=1; k<=len; k++){
    				f[i][k][0]=f[i+1][k][0]+f[i+1][k][1]+f[i+1][k-1][0];
    				f[i][k][1]=f[i+1][k-1][1];
    			}
    		}
    		else {
    			for (ll k=1; k<=len; k++){
    				f[i][k][0]=f[i+1][k][0]+f[i+1][k-1][0];
    				f[i][k][1]=f[i+1][k][1];
    			}
    		}
    	}
    	ll ans=1;
    	for (ll i=1; i<=len; i++)
    		ans=ans*mypow(i,f[1][i][0]+f[1][i][1])%P;
    	printf("%lld
    ",ans);
    	return 0;
    }
    

  • 相关阅读:
    1691: [Usaco2007 Dec]挑剔的美食家
    poj2892 Tunnel Warfare
    P3369 【模板】普通平衡树 Treap
    Splay的用法
    P3165 [CQOI2014]排序机械臂
    P2286 [HNOI2004]宠物收养场
    P3391 【模板】文艺平衡树(Splay)新板子
    3224: Tyvj 1728 普通平衡树(新板子)
    P2515 [HAOI2010]软件安装
    CF 219 D:Choosing Capital for Treeland(树形dp)
  • 原文地址:https://www.cnblogs.com/Vanisher/p/9136017.html
Copyright © 2011-2022 走看看