zoukankan      html  css  js  c++  java
  • 洛谷P4317 花神的数论题

    洛谷题目链接

    数位$dp$

    我们对$n$进行二进制拆分,于是就阔以像十进制一样数位$dp$了,基本就是套模板。。

    接下来是美滋滋的代码时间~~~

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define N 107
    #define ll long long
    #define mod 10000007
    using namespace std;
    ll n;
    int val[N];
    ll f[N][N];
    ll Dfs(int pos,int sum,bool limit)
    {
    	if(!pos)
    		return max(sum,1);
    	if(!limit&&f[pos][sum]!=-1)
    		return f[pos][sum];
    	int maxn=limit?val[pos]:1;
    	ll ans=1;
    	for(int i=0;i<=maxn;++i)
    		ans=(ans*Dfs(pos-1,sum+i,limit&&(i==maxn)))%mod;
    	if(!limit)
    		f[pos][sum]=ans;
    	return ans;
    }
    ll Get(ll x)
    {
    	int len=0;
    	while(x)
    	{
    		val[++len]=x&1;
    		x/=2;
    	}
    	memset(f,-1,sizeof(f));
    	return Dfs(len,0,1);
    }
    int main()
    {
    	scanf("%lld",&n);
    	printf("%lld",Get(n));
    	return 0;
    }
    

      

  • 相关阅读:
    浅谈Charles —— 青花瓷
    jdbc
    装饰者模式
    java可变参数
    简单日历
    DVD管理系统
    图片拷贝
    时间输出
    java基础小知识
    jQuery HTML
  • 原文地址:https://www.cnblogs.com/yexinqwq/p/10235677.html
Copyright © 2011-2022 走看看