传送门


考虑如果我们当前可以询问\(x\)个数,还剩下\(q\)次询问机会,我们要怎么构造询问方式?

肯定会这么考虑:

找到一个尽可能大的\(P\)满足\([x,P]\)能在每一次能询问\(x\)个数、剩下\(q-1\)次询问机会的情况下被询问出来,然后在这一次询问\(P+1\);

接下来令\(x=P+2\),再去做这一个操作直到\(q\)次询问都被问完。

那么我们现在要求解这个\(P\),也就是要求每一次能询问\(x\)个数、剩下\(q-1\)次询问机会的情况下最长可以求解多长的区间;而我们当前的问题可以看做可以询问\(x\)个数,还剩下\(q\)次询问机会能够求解最长多长的区间,可以发现前者是后者的一个子问题,可以\(DP\)处理。

设\(dp_{x,q}\)表示当前可以询问\(x\)个数,还剩下\(q\)次询问机会时最长的能够处理的区间长度。那么我们的转移如下:

①\(r_0=x\)

②\(r_i = r_{i-1} + dp_{min\{r_i,10000\},q-1} + 1\)

③\(dp_{x,q}=r_{q+1}-r_0\)

其中\(dp_{i,0}=0\),因为没有询问显然啥都不知道

我们每一次需要询问的序列为\(r_i-1\)。

显然复杂度是\(O(5 \times 10^8)\)的,但我们只需要解决\(dp_{1,5}\),其中有很多冗余状态,实际上可以记忆化搜索解决。

然后考虑如何进行询问。

我们的初始的最长解决长度是\(dp_{1,5}\),初始的最小知道的值为\(cur=1\),询问次数为\(q=5\),那么我们按照下面这种方法进行交互:

①构造上面对应的询问序列,询问一次

②得到\(K\)

③如果\(K=-1\)直接退出,否则\(cur=r_K\),最长解决长度变为\(dp_{min(cur,10000),q-1}\)

④\(q--\),回到第\(1\)步

然后就做完了

思路的确比较火

还有\(dp_{1,5}\)就等于\(M\)到底是什么鬼啊喂

#include<bits/stdc++.h>
#define int long long
//This code is written by Itst
using namespace std;

const int MAXN = 10004205361450474ll;

int dp[10010][5];
vector < int > query;

int dfs(int l , int q){
    if(!q)
        return 0;
    if(l > 10000)
        l = 10000;
    if(dp[l][q])
        return dp[l][q];
    int r = l;
    for(int i = 1 ; i <= l ; ++i)
        r = r + dfs(r , q - 1) + 1;
    r = r + dfs(r , q - 1);
    return dp[l][q] = r - l;
}

void interact(){
    int cur = 1 , q = 5 , K;
    for(int i = 1 ; i <= 5 ; ++i){
        query.clear();
        query.push_back(cur - 1);
        int now = cur;
        for(int j = 1 ; j <= min(cur , 10000ll) ; ++j){
            now += dp[min(now , 10000ll)][q - 1];
            query.push_back(now);
            ++now;
        }
        cout << query.size() - 1 << ' ';
        for(int i = 1 ; i < query.size() ; ++i)
            cout << query[i] << ' ';
        cout << endl;
        cin >> K;
        if(K == -1)
            exit(0);
        cur = query[K] + 1;
        --q;
    }
}

signed main(){
    dfs(1 , 5);
    interact();
    return 0;
}

CF1028G Guess the Numbers 构造、记忆化搜索的更多相关文章

  1. 牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】

    任意门:https://www.nowcoder.com/acm/contest/202/F 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 1048576K,其他语言2097152K6 ...

  2. hdu 5535 Cake 构造+记忆化搜索

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题意:给定n与m,其中1<= n <= 1e5,2 <= m <= 10;问 ...

  3. POJ 3252 Round Numbers(数位dp&amp;记忆化搜索)

    题目链接:[kuangbin带你飞]专题十五 数位DP E - Round Numbers 题意 给定区间.求转化为二进制后当中0比1多或相等的数字的个数. 思路 将数字转化为二进制进行数位dp,由于 ...

  4. 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)

    链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  5. cdoj Dividing Numbers 乱搞记忆化搜索

    //真tm是乱搞 但是(乱搞的)思想很重要 解:大概就是记忆化搜索,但是原数据范围太大,不可能记下所有的情况的答案,于是我们就在记下小范围内的答案,当dfs落入这个记忆范围后,就不进一步搜索,直接返回 ...

  6. HDU - 6415 多校9 Rikka with Nash Equilibrium(纳什均衡+记忆化搜索/dp)

    Rikka with Nash Equilibrium Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K ...

  7. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  8. CodeForces 173C Spiral Maximum 记忆化搜索 滚动数组优化

    Spiral Maximum 题目连接: http://codeforces.com/problemset/problem/173/C Description Let's consider a k × ...

  9. hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)

    pid=1078">FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/ ...

随机推荐

  1. JavaScript日期排序

    //日期排序 function sortDownDate(a, b) { return Date.parse(a.received) - Date.parse(b.received); } funct ...

  2. 喜闻乐见-Android简介

    本文主要是对Android系统做一个简介,包括其架构.启动流程.沙箱机制.APK.Darlvik以及ART. 1. 架构 Android是基于Linux内核开发出的一个移动操作系统,系统结构大致可以分 ...

  3. TensorFlow实现梯度下降

    # -*- coding: utf-8 -*- """ Created on Mon Oct 15 17:38:39 2018 @author: zhen "& ...

  4. etcd raft如何实现leadership transfer

    leadership transfer可以把raft group中的leader身份转给其中一个follower.这个功能可以用来做负载均衡,比如可以把leader放在性能更好的机器或者离客户端更近的 ...

  5. [20180614]删除bootstrap$记录无法启动2.txt

    [20180614]删除bootstrap$记录无法启动2.txt --//前几天看链接http://www.xifenfei.com/2018/05/willfully-delete-bootstr ...

  6. 洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器

    是的,我是想到什么知识点就说什么,没有固定的主题,我的标题都是在写完博客再给的.本篇博文说说列表进阶话题.其实列表应该是比较熟悉的了,而毫不夸张的说,在实际的开发中,列表也是使用的最多的,以后你会体会 ...

  7. sql server 运维时CPU,内存,操作系统等信息查询(用sql语句)

    我们只要用到数据库,一般会遇到数据库运维方面的事情,需要我们寻找原因,有很多是关乎处理器(CPU).内存(Memory).磁盘(Disk)以及操作系统的,这时我们就需要查询他们的一些设置和内容,下面讲 ...

  8. is_valid校验机制

    先来归纳一下整个流程 (1)首先is_valid()起手,看seld.errors中是否值,只要有值就是flase(2)接着分析errors.里面判断_errors是都为空,如果为空返回self.fu ...

  9. 3.6Python数据处理篇之Numpy系列(六)---Numpy随机函数

    目录 目录 前言 (一)基础的随机函数 (二)轴的随机函数 (三)概率的随机函数 目录 前言 前一段日子学了numpy,觉得无趣,没有学完,不过后来看了看matplotlib,sympy等库时,频频用 ...

  10. ABAP 在被访问的程序中获取访问程序的全局变量

    前些日子接到过一个看起来比较普通的需求: 存在一个系统标准函数组FG01,内含函数模块FM00,FM01……等等.在系统程序中,FM00会调用FM01,通过FM01获取获取某些数据. 需求要求,复制一 ...