传送门


考虑如果我们当前可以询问\(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. React 入门学习笔记整理(八)—— todoList

    APP.js import React, { Component,createRef,Fragment} from 'react'; import Todos from './components/t ...

  2. “此flash与您的地区不兼容”

    胡萝卜周:Adobe Flash Player AX/NP/PP 31.0.0.122 特别版 https://pan.baidu.com/s/1FMjJxhyJ2Qc1apbKRCtS3A 安装后还 ...

  3. SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法(2)

    书接上文. 上文中描述了如何在 SpringCloud+Feign环境下上传文件与form-data同时存在的解决办法,实践证明基本可行,但却会引入其他问题. 主要导致的后果是: 1. 无法与普通Fe ...

  4. C# RSA 加密

    class Sign_verifySign { #region prepare string to sign. //example format: a=123&b=xxx&c (wit ...

  5. oracle 日期格式化 TO_CHAR (datetime) 修饰语和后缀

    Datetime Format Element Suffixes Suffix Meaning Example Element Example Value TH Ordinal Number DDTH ...

  6. python--继承关系

    如果子类中定义与父类同名的方法或属性,则自动会覆盖父类对应的方法或属性. 子类完全继承父类的实例 >>> class Parent: def setName(self): print ...

  7. ABAP CDS 替换对象(Replacement Objects)引起的数据错误

    最近遇到了一个诡异的问题:从CDS视图中取得的数据,和从透明表中取得的数据,会有不同的值.在这里记录下问题的表现和解决方案,以供参考. 系统版本:S/4HANA OP1610 涉及表:MCHB 本文链 ...

  8. 支付宝alipay移动支付

    通过支付宝提供的API实现移动支付功能 一:下载相关的依赖和工具 蚂蚁金服 https://open.alipay.com/platform/home.htm 移动支付开发文档 https://doc ...

  9. js从数组中删除指定值(不是指定位置)的元素

    RT: js从数组中删除指定值的元素,注意是指定值,而不是指定位置. 比如数组{1,2,3,4,5},我要删除其中的元素3,但是这个3的位置我是不知道的,只知道要删除值为3的这一个元素,请问要怎么写? ...

  10. read_csv报错Initializing from file failed

    Python版本:Python 3.6 pandas.read_csv() 报错 OSError: Initializing from file failed,一般由两种情况引起:一种是函数参数为路径 ...