这题说的是给了一个二进制数R , 计算出 在[0,R) 区间内的数, 二进制中有n个1 个和

n<=1000; R<2^1000, 这样 用dp[len][lee] 表示在第len位的时候已经放了lee个1 个总和, num[len][lee] 表示在第len位的时候已经放了lee个1 个数有多少个,这样只要考虑当前位置放1与不放1 记忆化进行搜索

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <string.h>
  5. using namespace std;
  6. const int maxn =;
  7. typedef long long ll;
  8. const ll mod=;
  9. ll dp[maxn][maxn];
  10. ll num[maxn][maxn];
  11. char str[maxn];
  12. ll dig[maxn];
  13. void dfs(int loc, int lee , bool e, ll &value, ll &ge)
  14. {
  15. value = ge = ;
  16. if(e==false&& num[loc][lee]!=- ){
  17. value=dp[loc][lee]; ge =num[loc][lee]; return ;
  18. }
  19. if(loc==&&lee==){
  20. value=, ge=; return ;
  21. }
  22. int we = e? str[loc-]-'':;
  23. ll ans=, nu=;
  24. if(we==){
  25. if(loc->=lee){
  26. dfs(loc-,lee,false,ans,nu);
  27. value=ans, ge=nu;
  28. }
  29. if( lee > ){
  30. dfs(loc-,lee-,e,ans, nu);
  31. value=( value + ans + ( dig[loc-] )*nu%mod )%mod;
  32. ge = ( nu + ge )%mod;
  33. }
  34. }else{
  35. if(loc->=lee){
  36. dfs(loc-,lee,e,ans,nu);
  37. value= ans; ge=nu;
  38. }
  39. }
  40. if(e==false) { dp[loc][lee] = value, num[loc][lee]=ge; }
  41. }
  42. int main()
  43. {
  44. int n;
  45. dig[]=;
  46. for(int i=; i<=; ++i)
  47. dig[i]=(dig[i-]*)%mod;
  48. while(scanf("%d%s",&n,str)==){
  49. int len = strlen(str);
  50. for(int i=; i<len/; ++i){
  51. char c = str[i];
  52. str[i]=str[len--i];
  53. str[len--i]=c;
  54. }
  55. memset(dp,,sizeof(dp));
  56. memset(num,-, sizeof(num));
  57. memset(num[],,sizeof(num[]));
  58. num[][]=;
  59. ll ans=,nu=;
  60. dfs( len , n , true, ans, nu);
  61. ll digt=;nu=;
  62. for(int i=; i<len; ++i){
  63. if(str[i]==''){
  64. digt++; nu= ( nu + dig[i])%mod;
  65. }
  66. }
  67. if(digt==n) ans=(ans-nu+mod)%mod;
  68. printf("%I64d\n",ans);
  69. }
  70. return ;
  71. }

hdu5106 数位dp的更多相关文章

  1. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  2. bzoj1026数位dp

    基础的数位dp 但是ce了一发,(abs难道不是cmath里的吗?改成bits/stdc++.h就过了) #include <bits/stdc++.h> using namespace ...

  3. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  4. HDU2089 不要62[数位DP]

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 数位DP GYM 100827 E Hill Number

    题目链接 题意:判断小于n的数字中,数位从高到低成上升再下降的趋势的数字的个数 分析:简单的数位DP,保存前一位的数字,注意临界点的处理,都是套路. #include <bits/stdc++. ...

  6. 数位dp总结

    由简单到稍微难点. 从网上搜了10到数位dp的题目,有几道还是很难想到的,前几道基本都是模板题,供入门用. 点开即可看题解. hdu3555 Bomb hdu3652 B-number hdu2089 ...

  7. 数位DP入门

    HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...

  8. 数位DP之奥义

    恩是的没错数位DP的奥义就是一个简练的dfs模板 int dfs(int position, int condition, bool boundary) { ) return (condition ? ...

  9. 浅谈数位DP

    在了解数位dp之前,先来看一个问题: 例1.求a~b中不包含49的数的个数. 0 < a.b < 2*10^9 注意到n的数据范围非常大,暴力求解是不可能的,考虑dp,如果直接记录下数字, ...

随机推荐

  1. 通过ArcGIS Desktop数据发布ArcGIS Server

    1.双击GIS Servers--->Add ArcGIS Server 2.选择Publish GIS Services 3.输入Server URL:http://localhost:608 ...

  2. java中Date的使用情况

    在开发中常使用情况. 1.将String转为date  例如"201604131630" //设置日期格式 public SimpleDateFormat sdf = new Si ...

  3. LinkedBlockingQueue(lbq)阻塞队列

    最近开发中,经常使用这个类LinkedBlockingQueue,它是BlockingQueue这个子类. 并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列.该类主要提供 ...

  4. 安装autoit libary失败问题解决

    运行环境:win7-32,python2.7安装遇到的问题:

  5. 查看用户信息:w

    w命令有两个用途: (1) 用于查看当前系统负载(2) 用于查看当前登录用户的行为和信息,执行这个命令可以得知当前登入系统的用户有哪些人,以及他们正在执行哪些程序 [root@localhost ~] ...

  6. 关于IIS Express,集成管道

    一直没了解IIS Express是什么,现在也一样 暂时先做个记录 有关IIS Express的config http://www.cnblogs.com/IPrograming/archive/20 ...

  7. 【jQuery系列之插件】jquery插件之jquery-validation

    equalTo方法: equalTo: function( value, element, param ) { // Bind to the blur event of the target in o ...

  8. elk日志分析与发掘深入分析

    elk日志分析与挖掘深入分析 1 为什么要做日志采集? 2 挖财自己的日志采集和分析体系应该怎么建? 2.1 日志的采集 2.2 日志的汇总与过滤 2.3 日志的存储 2.4 日志的分析与查询 3 需 ...

  9. iOS 8 新特性介绍

    来源:nshipster.cn 发布时间:2014-07-06 阅读次数:2152 随便去问任何人,他们都会告诉你WWDC2014是近年来最为激动的回忆. 整个大会没有发布任何新硬件,它是一次史无前例 ...

  10. 微信小程序 --- 获取当前坐标

    获取位置:get.location type:wgs84(是全球定位系统,获取的坐标,gcj02是国家测绘局给出的坐标) btnclick:function(){ wx.getLocation({ t ...