首页 > 试题广场 >

小明打砖块

[编程题]小明打砖块
  • 热度指数:590 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小明在玩一个消除游戏。这个消除游戏有点特别。游戏中,你会得到 n 个一维排列的有各自颜色的砖块。
消除的时候,你有三种消除方案。你可以单消一个砖块,这样你可以得到 a 的得分;如果两个颜色一样的砖块在一起,你可以将这两个砖块一起消除获得 b 的得分;如果三个颜色一样的砖块在一期,你可以将这三个砖块一起消除获得 c 的得分。
消除后,被消除的砖块自动消失,被消除砖块的左右两端的砖块将在消除之后挨在一起。
小明想知道在最优策略下他能得到多少得分。

输入描述:
第一行4个整数n,a,b,c,表示砖块数量,和一消/二消/三消的得分。
接下来一行n个整数,第i 个整数 s_i 表示第 i 个砖块的颜色。

1 \leq s_i \leq n \leq 300, 0 \leq a,b,c \leq 10000


输出描述:
输出最高得分
示例1

输入

8 1 3 7
3 1 3 1 3 2 2 3

输出

14
头像 丨阿伟丨
发表于 2025-09-12 09:45:32
题目链接 小明打砖块 题目描述 给定一个长度为 的、带颜色的砖块序列。消除砖块有三种操作: 消除1个砖块,得分 。 消除2个相邻的同色砖块,得分 。 消除3个相邻的同色砖块,得分 。 消除后,左右两边的砖块会靠拢,可能形成新的可消除的同色砖块组合。目标是求出消除所有砖块能得到的最大总得分。 解 展开全文
头像 找工作的葡萄
发表于 2025-08-19 17:10:10
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, a, b, c; cin >> n 展开全文