题解 CF688A 【Opponents】

这篇博客介绍了CF688A题目的解题思路,主要涉及最大子段和问题。作者首先通过定义数组a来标记是否获胜,并使用−100作为初始化值,避免0影响最小子段和的计算。然后提供了暴力求解和动态规划两种方法,重点讲述了动态规划的算法思想,包括如何考虑序列中的正数和非正数情况,并给出了优化后的代码实现。
摘要由CSDN通过智能技术生成

题目传送门

好久没写题解了,今天正好有空(主要是在家里待的都要发霉了 ),就写篇水题题解


(第一版)题解部分

言归正传。这道题其实可以看做是一道最大子段和的模板题,对于这道题,我的思路是:先定义一个数组a,用来标记小白是否获胜,,并全部初始化为 − 100 -100 100(为什么?先设个悬念),然后读入时查找每一个字符串里是否有 0 0 0,如果有,就在a数组中相应位置标上 1 1 1,其余保持原状。接着暴力求最小子段和,因为要求连胜场数,所以前面的初始化就派上用场了:
因为如果进行一般的求最大子段和, 0 0 0会被纳入其子段中,而如果把 − 100 -100 100纳入进去,肯定不是最优解,在比较求 m a x max max时会被舍弃,所以不会对结果造成影响。
至于为什么要定义 − 100 -100 100,是因为 d < 100 d < 100 d<100,考虑最坏情况,若 1 1 1个数组里有 99 99 99 1 1 1,剩下的 − 100 -100 100也能起到很好的作用来使其被舍弃。
求完之后,直接输出结果就是了。
Code:

#include <bits/stdc++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值