首页 > 其他分享 >2024736DP专项练习赛

2024736DP专项练习赛

时间:2024-07-27 11:39:55浏览次数:14  
标签:字符 专项 练习赛 min 状态 2024736DP 当前 区间 dp

前言

比赛链接

image
image

榜上那个冒着蓝光的就是我……

提交记录跟答辩一样……

\(\color{#F8BBD0}Heldivis %%%%%%%%%%%%%%%%%%%\)

吐槽一下,虽然挂着 DP 专题赛的名字,但除了 T1 T3 以外,全是记搜题(虽然好像只有四道题来着)。

T1

签到题,\(n\) 范围很小,先用区间 dp 求出任意区间达到最终状态所需的最小代价,然后再用一个 dp 计算答案。

最开始没加 freopen,一直 RE,我是废物。

放一下核心的转移方程:

if(s[l-1]==s[r-1])dp[l][r]=min(dp[l][r],dp[l+1][r-1]);
else dp[l][r]=min(dp[l][r],dp[l+1][r-1]+min(w[l],w[r]));

ans[i]=min(ans[i],ans[j]+dp[j+1][i]);

T2

看一眼上面的提交记录就知道多测不清空的危害了。

记忆化搜索, dfs 函数里面放三个参数,代表当前剩下的区间和对手拿走的青色石头的数量,知道区间以后,当前是谁该拿石头已经确定,所以不用新增参数。

然后用一个前缀和维护(最开始用了缺省源里面的树状数,后来又 WA 又 T 才发现自己是傻子)计算当前自己拿的青色石头的数量,进行递归时,自己与对手身份互换,所以应该用自己的数量配上当前选择去传参。

然后用一个三维数组记忆化,两个数字判断当前输赢状况,边界的话 \(\gt k\) 即可。

然后我记忆化数组没有清空,收获满屏 RE(IOI赛制没有罚时,lalala)。

写完以后发现只有 50pts,然后不知道改了什么就 \(\color{green}AC\) 了,后来才知道是老邱改了时限。。。

代码是一坨,不放了,太丢人。

T3

不会写,BFS 拿了 50pts。

对于正解,因为字符串里面只有三种字符,所以用一个四维状态代表三种字符选择的数量和当前操作次数。

先预处理出来三种字符的前缀和和出现的所有位置。

四重循环分别枚举四种状态,然后每次分别对三种字符操作,计算出当前状态下另外两种字符在当前状态下还可以选择的次数。

如果选择当前字符,那么能够产生的贡献就是另外两种还可以选择的字符分别与当前这个字符进行交换产生的方案数,具体的,就是两种字符在当前区间内出现次数的和。计算好状态以后让新状态累加当前状态数量即可。

三种都枚举完以后,判断是否满足最终条件并累加到最终答案上面即可。

放一下核心代码(为了减少博客空间复杂度,压行压的很丑):

dp[0][0][0][0]=1;
for(int i=0;i<=cnt[1];i++)for(int j=0;j<=cnt[2];j++)
for(int k=0;k<=cnt[3];k++)for(int c =0;c <=500;c ++)
{
	d[1]=i;d[2]=j;d[3]=k;
	for(int num=1;num<=3;num++)
	{
		if(d[num]>=cnt[num])continue;
		int now=pos[num][d[num]],cost=0;
		for(int l=1;l<=3;l++)if(l!=num)cost+=max(0,sum[l][now]-d[l]);
		if(c+cost<=500)dp[i+(num==1)][j+(num==2)][k+(num==3)][c+cost]+=dp[i][j][k][c];
	}
	if(i==cnt[1]&&j==cnt[2]&&k==cnt[3]&&c<=kk)ans+=dp[i][j][k][c];
}

T4

ABC 原题+ ICPC热身赛原题,无话可说……

输出 -1 有 18pts,脑残特殊性质写了再加 20pts,然后我脑残 max 写了个 min,没调出来,导致 rk2 -> rk5,呜。

正解是爆搜+记忆化,复杂度证明得很LC,没毛病。

先离散化,dfs 里面传三个参,代表当前已经可以到达的区间和当前在区间左端点还是右端点。

用一个数组表示当前是否已经拿到对应的锤子,大力分讨即可。

代码实在压不下来,所以不放了。

结语

军训不用去

天天玩电脑

         ————牢邱

标签:字符,专项,练习赛,min,状态,2024736DP,当前,区间,dp
From: https://www.cnblogs.com/Lydic/p/18326760

相关文章

  • ADB:移动端专项测试必备神器!!
      01Android调试桥(adb)Android调试桥(adb)是一种功能多样的命令行工具,可让您与设备进行通信。adb命令可用于执行各种设备操作(例如安装和调试应用),并提供对Unixshell(可用来在设备上运行各种命令)的访问权限。 它是一种客户端-服务器程序,包括以下三个组件:客户端:用于......
  • web专项
    CTF-WEB-CTFhub注:以ctfhub练习网站为例!一:信息泄露1、目录遍历漏洞(1)原理:web服务器或者web应用程序对用户输入的文件名称未进行严格的验证过滤而导致的一种安全漏洞;让攻击者可以利用一些特殊的字符可以绕过服务器的安全限制、访问任意文件;就是没有过滤用户输入的./等目录跳跃符......
  • 聚焦IOC容器刷新环节prepareBeanFactory专项
    目录一、IOC容器的刷新环节快速回顾二、prepareBeanFactory源码展示分析三、设置基本属性深入分析(一)设置类加载器(二)设置表达式解析器(三)设置属性编辑器(四)设计目的分析四、忽略自动装配深入分析(一)详细分析和说明EnvironmentAwareEmbeddedValueResolverAwareResourceL......
  • DASCTF 2023六月挑战赛|二进制专项 PWN (下)
    DASCTF2023六月挑战赛|二进制专项PWN(下)1.can_you_find_me检查保护意料之中64位ida逆向只有add,和del功能不能show先看add吧最多申请10个堆块存在off_by_null漏洞,可以考虑unlink来进行堆块重叠del函数就没有UAF漏洞了1.首先想办法泄露出libc地址,因为本题libc是2.27......
  • Crypto专项
    一:常见编码类型ASCII编码(1)特征:ASCII在线转化地址:http://www.mokuge.com/tool/asciito16/工具转码:(1)小葵多功能转换工具(2)CTFcrackTools工具base家族编码(1)base64编码特点:由A-Z,a-z,0-9,+,/64个可见字符组成、""符号作为后缀填充、不属于编码字符;一般情况下密文尾部会有两个......
  • DASCTF 2023六月挑战赛|二进制专项 PWN (上)
    DASCTF2023六月挑战赛|二进制专项PWN(上)1.easynoteedit函数对长度没有检查free函数存在UAF漏洞思路:1.通过堆溢出,UAF,修改size位达到堆块重叠,使用fastbinattack,把__malloc_hook,写入one_gadget2.通过unlink修改freegot表为systemexp:frompwnimport*context(log_lev......
  • DASCTF 2023六月挑战赛|二进制专项 PWN (上)
    DASCTF2023六月挑战赛|二进制专项PWN(上)1.easynoteedit函数对长度没有检查free函数存在UAF漏洞思路:1.通过堆溢出,UAF,修改size位达到堆块重叠,使用fastbinattack,把__malloc_hook,写入one_gadget2.通过unlink修改freegot表为systemexp:frompwnimport*context(lo......
  • oppo,埃科光电25届秋招,快手25届技术人才专项计划内推
    oppo,埃科光电25届秋招,快手25届技术人才专项计划内推①【OPPO】25届秋招开启!内推简历优先筛选!【岗位类别】AI/算法类,软件类,硬件类,工程技术类,品牌策划类,设计类,产品类,职能类等......
  • Misc专项
    文件操作与隐写1、文件类型的识别1、文件头部未被破坏的情况下(1)file命令识别出file.doc为jpg类型打开图片之后没有发现flag,用notepad++打开,发现末尾有unicode编码的数据,解码发现了flag(2)winhex通过winhex程序查看文件头类型,根据文件头部内容去判断文件的类型(3)notepad+......
  • 牛客练习赛127
    A、小红的最大价值无聊打一下代码实现#include<bits/stdc++.h>#ifdefLOCAL#include"algo/debug.h"#else#definedebug(...)42#endifintmain(){std::cin.tie(nullptr)->sync_with_stdio(false);#defineintlonglongintn,k;std::c......