CF做题记录--2023.10.24

文章讲述了两个编程题目:1400CBinaryStringReconstruction,涉及将01串按照特定规则变换并求原串;1418CMortalKombatTower,是关于动态规划的策略优化问题,计算在取数游戏中先手取到1的最小次数。
摘要由CSDN通过智能技术生成

1400 C.Binary String Reconstruction Problem - 1400C - Codeforces 

给出一种01串的变换方法及对一个串变换后的结果串,求出原串(可以有多种),多组询问。

变换方法如下:

原串为 w,变换后的串为 s,两串长度相等;给出一个整数 x;01串从下标 11 开始。

  • 如果原串 wi−x​ 这一位存在且为 1,那么 si​ 为 1(形式化地说,如果 i>x 且 wi−x​=1,那么 si​=1)。

  • 如果原串wi+x​ 这一位存在且为 1,那么 si​ 为 1(形式化地说,如果 i+x≤n 且 wi+x​=1,那么 si​=1)。

  • 如果上述两种情况均不成立,那么si​=0。

给出 s,求出一种可能的 w,若不存在任意一种 w,输出-1

思路

模拟题?

先从w逆向求s,在顺序求w,看看两次w是否一致。

w->s时,由于长度边界和i所处位置的关系,样例中可能无法逆推出合适的s

反正就是很离谱

1418C. Mortal Kombat Tower Problem - 1418C - Codeforces 

给出 t 组数据,对于每一组数据:

给定一个长度为 n 的 01 数组,先后手轮流从数组开头取数,每次可以取走 1 或 2 个数。

先后手都需要最小化先手取到 1 的数量,输出这个最小值。

思路

dp题

先说特殊情况,n≤3时,直接输出a[1]

设:dp1[i]为朋友走到 i 号时使用的全部点数,dp2[i]为我走到 i 号时使用的点数

那么有

dp1[i]=min(dp2[i-1]+a[i] , dp2[i-2]+a[i-1]+a[i])

dp2[i]=min(dp1[i-1] , dp1[i-2])

 合并一下,有

dp[i]=min(dp[i-2]+a[i-1] , dp[i-4]+a[i-3]+a[i-2])

 初始状态需要dp[1~4]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值