思路:数位$DP$

提交:5次(其实之前A过,但是调了调当初的程序。本次是2次AC的)

题解:

我们分别求出$sum(x)=i$,对于一个$i$,有几个$x$,然后我们就可以快速幂解决。

至于求个数用数位$DP$就好了。

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #define ull unsigned long long
  5. #define ll long long
  6. #define R register ll
  7. using namespace std;
  8. #define pause (for(R i=1;i<=10000000000;++i))
  9. #define In freopen("NOIPAK++.in","r",stdin)
  10. #define Out freopen("out.out","w",stdout)
  11. namespace Fread {
  12. static char B[<<],*S=B,*D=B;
  13. #ifndef JACK
  14. #define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
  15. #endif
  16. inline ll g() {
  17. R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
  18. if(ch==EOF) return EOF; do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
  19. } inline bool isempty(const char& ch) {return (ch<=||ch>=);}
  20. inline void gs(char* s) {
  21. register char ch; while(isempty(ch=getchar()));
  22. do *s++=ch; while(!isempty(ch=getchar()));
  23. }
  24. } using Fread::g; using Fread::gs;
  25.  
  26. namespace Luitaryi {
  27. const int N=,M=1e7+;
  28. ll n;
  29. int len,num[N];
  30. ll f[N][N];
  31. inline int qpow(ll a,ll p) { R ret=; a%=M;
  32. for(;p;p>>=,(a*=a)%=M) if(p&) (ret*=a)%=M; return ret;
  33. }
  34. inline ll dfs(int l,bool ul,int c,int d) {//l:长度,ul:上界标记,c:统计1的个数,d:所求一的个数(即我们此时令sum(x)=d)
  35. if(!l) return c==d;
  36. if(!ul&&~f[l][c]) return f[l][c];
  37. R lim=(ul?num[l]:),cnt=;
  38. for(R i=;i<=lim;++i)
  39. cnt+=dfs(l-,ul&&i==lim,c+i,d);
  40. return ul?cnt:f[l][c]=cnt;
  41. }
  42. inline int solve(ll n) { R ans=;
  43. for(;n;n>>=) num[++len]=n&;
  44. for(R i=;i<=len;++i)
  45. memset(f,0xff,sizeof(f)),
  46. ans=(ans*qpow(i,dfs(len,true,,i)))%M;
  47. return ans;
  48. }
  49. inline void main() {
  50. n=g(); printf("%d\n",solve(n));
  51. }
  52. }
  53. signed main() {
  54. Luitaryi::main(); return ;
  55. }

2019.07.21

P4317 花神的数论题 动态规划?数位DP的更多相关文章

  1. 【洛谷】4317:花神的数论题【数位DP】

    P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...

  2. [Bzoj3209]花神的数论题(数位dp)

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2633  Solved: 1182[Submit][Status][Disc ...

  3. [bzoj3209]花神的数论题_数位dp

    花神的数论题 bzoj-3209 题目大意:sum(i)表示i的二进制表示中1的个数,求$\prod\limits_{i=1}^n sum(i)$ 注释:$1\le n\le 10^{15}$. 想法 ...

  4. bzoj3209 花神的数论题 (二进制数位dp)

    二进制数位dp,就是把原本的数字转化成二进制而以,原来是10进制,现在是二进制来做,没有想像的那么难 不知到自己怎么相出来的...感觉,如果没有一个明确的思路,就算做出来了,也并不能锻炼自己的能力,因 ...

  5. 【BZOJ3209】花神的数论题(数位DP)

    点此看题面 大致题意: 设\(sum(i)\)表示\(i\)二进制中1的个数,请求出\(\prod_{i=1}^n sum(i)\). 数位\(DP\) 很显然,这是一道数位\(DP\)题.我们可以先 ...

  6. BZOJ 3209: 花神的数论题【数位dp】

    Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...

  7. 2018.10.27 bzoj3209: 花神的数论题(数位dp)

    传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前 ...

  8. P4317 花神的数论题 dp

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

  9. DP,数论————洛谷P4317 花神的数论题(求1~n二进制中1的个数和)

    玄学代码(是洛谷题解里的一位dalao小粉兔写的) //数位DP(二进制)计算出f[i]为恰好有i个的方案数. //答案为∏(i^f[i]),快速幂解决. #include<bits/stdc+ ...

随机推荐

  1. Python_OpenCV视频截取并保存

    在图像处理之前,我们需要对拿到手的数据进行筛选,对于视频,我们需要从中截取我们需要的一段或几段 整体思路比较简单,通过设定截取视频的起止时间(帧数),可以将该时间段内的图像保存为新的视频 直接上代码: ...

  2. LC 173. Binary Search Tree Iterator

    题目描述 Implement an iterator over a binary search tree (BST). Your iterator will be initialized with t ...

  3. S03_CH10_DMA_4_Video_Stitch视频拼接系统

    S03_CH10_DMA_4_Video_Stitch视频拼接系统 10.1概述 注意:本课程和上一课程<S03_CH09_DMA_4_Video_Switch视频切换系统>基本相同,不同 ...

  4. 跟我一起学编程—《Scratch编程》第22课:颠弹力球

    1. 能够熟练绘制角色和背景造型 2. 能够熟练控制角色角度.速度等 3. 能够熟练使用变量 4. 能够熟练使用循环.选择等指令控制程序 任务描述: 1. 绘制弹力小球.托板角色,背景造型. 2. 游 ...

  5. Asp.net core 学习笔记 ( ef core transaction scope & change level )

    ef core 有 unit of work 的概念,当我们 save change 时会自动使用 transaction 确保更新的一致性. 隔离级别是默认的 read committed 不允许脏 ...

  6. redis哈希表数据类型键的设置

    命令名称:hset 语法:hset key field value 功能: 1)将哈希表key中的域field的值设为value. 2)如果key不存在,一个新的哈希表被创建并进行hset操作. 3) ...

  7. 南宁AI项目

    1.能了解并对项目整体进度情况有清晰的认识,什么时间点需要完成什么工作项. 2.认识了解项目干系人,能和客户独立沟通交流,理解现场业务,不要一问三不知,什么情况都不了. 3.能推动项目进展和问题及时处 ...

  8. 数据库入门(mySQL):创建数据库

    基于JetBrains DataGrip创建数据库.SQL语句创建数据库 MySQL数据库存储引擎和数据类型 创建数据库表及基本操作 导出数据库.删除数据库.导入数据库 一.基于JetBrains D ...

  9. ES6 Proise 简单理解

    Promise 这是ES6中增加的一个处理异步的对象. 传统变成写异步函数的时候,经常会遇到回调套回调: Promise 是异步编程的一种解决方案,比传统的解决方案 -----回调函数和事件----- ...

  10. sql语句查询结果中添加自增列

    SELECT Row_Number() over ( order by getdate() ) as init , * FROM 表名