本蒟蒻又双叒叕被爆踩辣!

P2727 01串 Stringsobits

其实只要理解了就会觉得这是个傻逼题!

这题给的标签是 dp,搜索,数论

但是可以用二分的思路做!

Solution:

从最高位开始枚举,

我们考虑每一位,是不是只可以取0/1

那么我们就先求出当此位置为0时,它可以做到的方案数(等会再告诉你们为什么要求

我们想一想,什么时候此位该为0,什么时候此位该为1???

我们求出它的方案数,那这个方案数是不是就是但此位为0时可以达到的最大值;

如果i比这个最大值还要大的话,此位为0是不是就做不到了。

result:

所以,如果这个方案数比i大,说明排名为i的数一定属于最高位是0的数,否则就属于最高位为1的数。

你就逐位考虑下来就可以了!

这就是运用了二分的思路,对其进行求解。

至于方案数的话,在最开始跑一遍dp就行了,

  1. g[i][j] = g[i - 1][j - 1] + g[i - 1][j];

就是它为0/1前一位的值相加即可。

code:

  1. #include<bits/stdc++.h>//万能头
  2. using namespace std;
  3. #define maxn 60//可以稍微大一点
  4. #define int long long//这是个坑
  5. #define Rep(x, a, b) for(int x = a; x <= b; ++ x)
  6. #define Dep(x, a, b) for(int x = a; x >= b; -- x)
  7. int n, l, k, g[maxn][maxn], sum[maxn][maxn], a[maxn];
  8. //g[k][i]是来表示在前k位中,恰有i个1的二进制数的数量
  9. //sum[k][i]是来表示在前k位中,最多有i个1的二进制数的数量
  10. //a[i]是当前这一位是0/1,输出是用。
  11. void dfs(int x, int l, int k){
  12. if(x == 0){//跑到了最后一位了
  13. Dep(i, n, 1){//输出路径
  14. printf("%d", a[i]);
  15. }
  16. exit(0);//不可以用return,return只结束当前这一轮函数,exit(0)就可以直接结束程序。
  17. }
  18. if(k <= sum[x - 1][l]){//如果它小于或等于此位取0时的最大值
  19. a[x] = 0;//当前这位就取0;
  20. dfs(x - 1, l, k);//并且直接跑到下一位
  21. }
  22. else{//如果它大于的话
  23. a[x] = 1;//当前就取1;
  24. dfs(x - 1, l - 1, k - sum[x - 1][l]);//并且跑下一位的时候要把还可以取的‘1’的数量-1,然后要跑的数位也会减去这位取了‘1’以后减下的值。
  25. }
  26. }
  27. signed main(){
  28. scanf("%d%d%d", &n, &l, &k);//RT
  29. g[0][0] = 1;//初始化,一定要记得
  30. Rep(i, 1, n){
  31. g[i][0] = 1;//如果只要0个‘1’,肯定只有1种方法。
  32. Rep(j, 1, n){
  33. g[i][j] = g[i - 1][j - 1] + g[i - 1][j];//递归求恰有i个1的二进制数的数量
  34. }
  35. }
  36. Rep(i, 0, n){
  37. Rep(j, 0, n){
  38. Rep(k, 0, j){
  39. sum[i][j] += g[i][k];//跑一下求最多有i个1的二进制数的数量
  40. }
  41. }
  42. }
  43. dfs(n, l, k);//搜索一下就可以了
  44. return 0;
  45. }

在这里还说一下我前两次Wa在那

First:

错误1

我求sum[ ][ ]的时候,不是从第0位开始跑的。。。

Second:

错误2

没开long longQAQ

Ps:请看懂再抄

洛谷 题解 P2727 【01串 Stringsobits】的更多相关文章

  1. 洛谷P2727 01串 Stringsobits

    P2727 01串 Stringsobits 24通过 55提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 这题的思路是啥啊!!!跪求- 题目背景 考虑 ...

  2. 【题解】洛谷P1032 [NOIP2002TG]字串变换(BFS+字符串)

    洛谷P1032:https://www.luogu.org/problemnew/show/P1032 思路 初看题目觉得挺简单的一道题 但是仔细想了一下发现实现代码挺麻烦的 而且2002年的毒瘤输入 ...

  3. 【洛谷】P1032 字串变换

    题目地址:https://www.luogu.org/problemnew/show/P1032 洛谷训练场BFS的训练题呀. “BFS不就是用队列的思想去遍历一切情况嘛.我已经不是小孩子了,我肯定能 ...

  4. 洛谷 题解 UVA572 【油田 Oil Deposits】

    这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...

  5. 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)

    必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...

  6. 洛谷题解P4314CPU监控--线段树

    题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...

  7. Luogu P2727 【01串 Stringsobits】

    看到题解里好像都是用$DP$解决的,本着禁止DP的原则,我来提供一发纯数学其实和DP本质相同的题解,前两天刚反演题,脑子炸了,本来说换换脑子,结果还是数学 首先受进制思想启发,我们不妨按位考虑,考虑这 ...

  8. 洛谷P4493 [HAOI2018]字串覆盖(后缀自动机+线段树+倍增)

    题面 传送门 题解 字符串就硬是要和数据结构结合在一起么--\(loj\)上\(rk1\)好像码了\(10k\)的样子-- 我们设\(L=r-l+1\) 首先可以发现对于\(T\)串一定是从左到右,能 ...

  9. 洛谷 题解 UVA1626 【括号序列 Brackets sequence】

    看还没有人发记搜的题解,赶紧来水发一篇 我们定义dp[i][j]为区间i~j内最少添加几个括号才能把这个串变成正规括号序列. 考虑四种情况 i>j不存在这种子串,返回0 i==j子串长度为1无论 ...

随机推荐

  1. curl太复杂难用记不住?来试试Httpie一个简单的现代化命令行Http客户端

    HTTPie 是一个简单的现代化命令行 HTTP 客户端. 交互友好,JSON支持,语法高亮,类wget下载,支持拓展等 功能特性 自然而且简单的命令语句 格式化且高亮显示输出内容 内置 JSON 支 ...

  2. linux常用的命令解释

    1.man命令的操作按键: 按键 用处 空格键 向下翻一页. [Page Down] 向下翻一页. [Page Up] 向上翻一页. [HOME] 直接前往首页. [END] 直接前往尾页. /关键词 ...

  3. php sublime常用插件

    php sublime常用插件 1 Sublime Text的默认设置是不开启显示编码的,如果想开启,可通过菜单Perference → Settings – User,在打开的配置文件里 ,在大括号 ...

  4. Ansibile之playbook初识

    一.playbook简介 ansiblie的任务配置文件被称为playbook,俗称“剧本”,每一个剧本(playbook)中都包含了一系列的任务,这每个任务在ansible中又被称为“戏剧”(pla ...

  5. Python 基础 内置函数 迭代器与生成器

    今天就来介绍一下内置函数和迭代器 .生成器相关的知识 一.内置函数:就是Python为我们提供的直接可以使用的函数. 简单介绍几个自己认为比较重要的 1.#1.eval函数:(可以把文件中每行中的数据 ...

  6. Swoole和Redis实现的并发队列处理系统

    由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的.为了完成这些异步操作,我们做了一个基于Redis队列任务系统. 大家知道,一个消息队列处理系统主要分为两大部分:消费者和生 ...

  7. Vue2.x与bootsrap-table动态添加元素和绑定事件无效

    一.问题:     最近在使用vue与bootstrap-table结合生成表格时,按以前的经验----每列数据可用formatter:function(value,row,index){}进行一些其 ...

  8. Apache服务安装及一些基本操作

    注意:安装apache服务之前记得搭建yum仓库 1.安装apache服务,输入命令“yum install httpd” 安装成功后,会这样显示 2.需要对Apache服务进行启动,输入命令“sys ...

  9. php使用cUrl方法 get、post请求

    php使用curl方法,请确保已经开启curl扩展.传送门:http://www.cnblogs.com/wgq123/p/7450667.html /**Curl请求get方法 *@$url Str ...

  10. 浅谈Linux中的各种锁及其基本原理

    本文首发于:https://mp.weixin.qq.com/s/Ahb4QOnxvb2RpCJ3o7RNwg 微信公众号:后端技术指南针 0.概述 通过本文将了解到如下内容: Linux系统的并行性 ...