码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Bags Game


    题目传送门

    引

    这种博弈问题挺经典的,第一时间就应该想到 区间 D P 区间DP 区间DP ,小小地积累一下吧

    解法

    设计出 D P DP DP
    f l . r : 考虑区间 [ l , r ] . 先手可以获得的最大差值 f_{l.r} : 考虑区间 [l,r] .先手可以获得的最大差值 fl.r​:考虑区间[l,r].先手可以获得的最大差值
    应该有些题也可以定义为 最大值 , 计算答案时用 总和 算出 差值 , 但是这道不行,计算中途可能减去 A A A 或 C C C 不好记录

    考虑转移

    1. 直接取两端:
      显然有 f l , r ← max ⁡ ( a l − f l + 1 , r , a r − f l , r − 1 ) f_{l,r} \gets \max(a_l-f_{l+1,r},a_r-f_{l,r-1}) fl,r​←max(al​−fl+1,r​,ar​−fl,r−1​)

    2. 给 S n u k e Snuke Snuke 钱
      f l , r ← s l , r − A / C − ( f i , i − 1 + B / D + s i , i − 1 + B / D ) f_{l,r}\gets s_{l,r}-A/C-(f_{i,i-1+B /D}+s_{i,i-1+B /D}) fl,r​←sl,r​−A/C−(fi,i−1+B/D​+si,i−1+B/D​)
      用个数据结构或单调队列维护好 f i , i − 1 + B / D + s i , i − 1 + B / D f_{i,i-1+B /D}+s_{i,i-1+B /D} fi,i−1+B/D​+si,i−1+B/D​ 的最小值就好了

    Code

    用的单调队列

    #include
    #define S(p,q) s[p+q-1]-s[q-1]
    #define V(p,q) (S(p,q)+f[p][q])
    
    using ll = long long ;
    using namespace std;
    
    const int N=3e3+7;
    ll f[N][N],n,A,B,C,D,s[N],x[N],q[N];
    void calc(ll k,ll i,ll Z){
    	for(ll j=1,h=1,t=0;j<=n+1-k;j++){
    		while(h<=t&&V(k,q[t])>=V(k,j))t--;
    		q[++t]=j;
    		while(hi)f[i][j+k-i]=max(f[i][j+k-i],S(i,j+k-i)-Z-V(k,q[h]));
    	}
    }
    int main(){
    	scanf("%d %lld %lld %lld %lld",&n,&A,&B,&C,&D);
    	for(ll i=1;i<=n;i++) scanf("%lld",&x[i]),s[i]=s[i-1]+x[i];
    	for(ll i=1;i<=n;i++){
    		for(ll j=1;j<=n+1-i;j++)f[i][j]=max(x[j]-f[i-1][j+1],x[i+j-1]-f[i-1][j]);
    		calc(i-min(i,B),i,A);calc(i-min(i,D),i,C);
    	}
    	printf("%lld\n",f[n][1]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    结

    好难呀。。

  • 相关阅读:
    2022世界杯结果预测,简单AI模型最有效?附代码!
    Docker systemctl 安装配置
    普林斯顿微积分读本05第四章--求解多项式的极限问题
    SpringBoot统一返回处理和全局异常处理
    PostgreSQL 给表添加自增字段脚本
    【redis配置项-数据库通知】
    深度学习推荐系统(五)Deep&Crossing模型及其在Criteo数据集上的应用
    Java面试问题汇总
    SpringCloud-微服务拆分、服务远程调用
    C++ stack queue模拟实现
  • 原文地址:https://blog.csdn.net/PocketSam/article/details/134256092
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号