传送门


考虑如果我们当前可以询问\(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. 【读书笔记】iOS-微定位技术

    在大型商场,医院或是大楼里,你是否曾经有过找不到想去的地方的经历呢?这种情况下采用传统的定位方法就有些力不从心了.首先这些地方不能采用GPS定们,而Wifi和蜂窝式移动电话基站定位误差比较大.这种情况 ...

  2. Stackoverflow 珠玑:C#封装重试指定次数的功能

    最近写的一个 .NET Core 爬虫里用到了需要多次重试的功能,本着无脑输出的精神,google 了一下,还真给我找到了: public static T Retry<T, TExceptio ...

  3. Linux 学习笔记之超详细基础linux命令 Part 8

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 7----------------- ...

  4. 喜闻乐见-Android简介

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

  5. [20170927]关于hugepages.txt

    [20170927]关于hugepages.txt --//今天测试hugepages与内核参数nr_overcommit_hugepages,才发现HugePages_Surp表示什么? --// ...

  6. validator js验证器

    转自:https://github.com/jaywcjlove/validator.js 轻量级的JavaScript表单验证,字符串验证.没有依赖,支持UMD 导入js库 <script t ...

  7. January 12th, 2018 Week 02nd Friday

    Nothing behind me, everything ahead of me, as is ever so on the road. 我的身后空空荡荡,整个世界都在前方,这就是在路上. That ...

  8. python scrapy爬虫框架概念介绍(个人理解总结为一张图)

    python的scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架   python和scrapy的安装就不介绍了,资料很多 这里我个人总结一下,能更加快理解scrapy和快速上手一个简 ...

  9. transition: 0.2s all ease;

    /* 全部样式 0.2秒 缓动*/ transition: 0.2s all ease;

  10. npm包开发(whale-makelink)

    whale-makelink是一个npm工具,是强业务的工具,可以将当前工程目录下的项目文件夹,在README中生成项目的链接地址.Demo. 一.npm init 使用npm init生成packa ...