P2135 方块消除

技术P2135 方块消除 P2135 方块消除目录题目题目描述输入格式输出格式输入输出样例思路代码
P2135 方块消除
题目
https://www.luogu.com.cn/problem/UVA1

P2135块消除。

目录标题描述输入格式输出格式输入输出样本思路代码P2135块消除。

题目

https://www.luogu.com.cn/problem/UVA10559

https://www.luogu.com.cn/problem/P2135

题目描述

吉米最近迷上了一种叫做方块淘汰的游戏。游戏规则如下:N个彩色方块排成一排,相同颜色的方块连接成一个区域(如果相邻的两个方块颜色相同,那么这两个方块属于同一个区域)。为了简化主题,用一个数字来表示连接在一起的相同颜色的正方形的数量。

例如,9 122233331表示为。

4 1 2 3 1

1 3 4 1

玩游戏时,可以选择要擦除的区域。如果这个区域包含的方块数是x,你会得到x 2的分数。方块被擦除后,剩余的方块将垂直落到底部或其他方块上。而当一排方块被完全抹掉后,它右边的所有方块都会向左移动一个方块。我希望吉米能找到获得最高分的最佳方案。你能帮助他吗?

输入格式

第一行包含整数m(1=m=50),表示相同颜色的块数。第二行包含m的数字,表示每个方块的颜色(1到m之间的整数)。

输出格式

只有一个整数,可能的最高分。

输入输出样例

输入 #1

1 2 3 1

1 3 4 1

输出 #1

29

思路

让\(f_{i,j,k}\)表示消除\(l,r\)之间的方块,与\(i\)颜色相同的方块保留\(k\)的最大分数。

关于初始化,很明显有:个\ (f _ {I,I,0 }=num _ I ^ 2,f _ {I,I,num _ I}=0 \),其中\(num_i\)是第\(i\)个区域的方块数。

转移有点复杂,要看代码,核心是枚举保留还是消去。

代码

#包含iostream

#包含cstdio

#包含cstring

#定义整数长

使用命名空间标准;

int read(){ 0

int re=0;

char c=getchar();

bool negt=false

while(c '0' || c '9 ')

negt |=(c=='-'),c=getchar();

while(c='0' c='9 ')

re=(re 1) (re 3) c - '0 ',c=getchar();

返回negt-re : re;

}

const int N=210

int col[N];//颜色

整数;

int f[55][55][1010];

int n;

int solve(){ 0

memset(col,0,sizeof(col));

memset(num,0,sizeof(num));

memset(f,0,sizeof(f));

n=read();

int sum=0;

for(int I=1;I=n;I)col[I]=read();

for(int I=1;I=n;i )num[i]=read(),sum=num[I];

memset(f,-0x3f,sizeof(f));

for(int I=1;I=n;(一)

f[i][i][0]=num[i] * num[i],f[I][I][num[I]]=0;

for(int I=n;I 0;i -)

for(int j=I ^ 1;j=n;j ) {

for(int k=I;k j;k){ 0

f[i][j][0]=max(f[i][j][0],f[I][k][0]f[k 1][j][0]);

if(col[i]==col[k 1])

for(int l=0;l=总和;L) {//枚举[k ^ 1,j]并将l框留为与col[i]相同的颜色。

f[i][j][l]=max(f[i][j][l],f[I][k][0]f[k 1][j][l]);

if(I 1=k){ 0

f[i][j][0]=最大值(

f[i][j][0],

f[i 1][k][0] f[k 1][j][l] (l数[i]) * (l数[i])

) ;

f[i][j][l数量[i]]=最大值(

f[i][j][l数量[i]],

f[i 1][k][0] f[k 1][j][l]

);

}

}

}

}

返回f[1][n][0];

}

签名main(){ 0

printf('%lld ',solve());

返回0;

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/52097.html

(0)

相关推荐

  • 二分之根号二等于多少,二分之根号二是分数吗,为什么

    技术二分之根号二等于多少,二分之根号二是分数吗,为什么二分之根号二不是分数二分之根号二等于多少。解答过程如下:(1)分数是一个整数a和一个正整数b的不等于整数的比。分数表示一个数是另一个数的几分之几,或一个事件与所有事件

    生活 2021年10月26日
  • Sql Server参数化查询之where in和like实现详解

    技术Sql Server参数化查询之where in和like实现详解 Sql Server参数化查询之where in和like实现详解GPS平台、网站建设、软件开发、系统运维,找森大网络科技!htt

    礼包 2021年11月15日
  • 怎么使用Python Pandas中iloc和loc

    技术怎么使用Python Pandas中iloc和loc本篇内容主要讲解“怎么使用Python Pandas中iloc和loc”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎

    攻略 2021年11月10日
  • 怎么理解Mysql GITD复制中断处理

    技术怎么理解Mysql GITD复制中断处理怎么理解Mysql GITD复制中断处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从库发现复制错误: "ro

    攻略 2021年11月16日
  • G1垃圾回收器与CMS的区别有哪些

    技术G1垃圾回收器与CMS的区别有哪些本篇内容主要讲解“G1垃圾回收器与CMS的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“G1垃圾回收器与CMS的区别有哪些”吧

    攻略 2021年10月20日
  • vue响应式原理简述(vue的响应式原理)

    技术vue2和vue3数据响应式原理分析及如何实现今天就跟大家聊聊有关vue2和vue3数据响应式原理分析及如何实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

    攻略 2021年12月23日