洛谷UVA10559题面:

题目描述

有 n 个带有颜色的方块,没消除一段长度为x的连续的相同颜色的方块可以得到 x^2 的分数,让你用一种最优的顺序消除所有方块使得得分最多。

输入格式

第一行包含测试的次数 t(1≤t≤15) 。
每个案例包含两行。
第一行包含整数 n(1≤n≤200),即框数。
第二行包含 n 个数,代表每个盒子的颜色。数字的大小 1∼n 内。

输出格式

每个案例包含一行一个整数表示答案。

原文:



POJ的题面被我吃了,不想放,我好懒嗄(反正一模一样)
我们先做弱化版:

题目描述

Jimmy最近迷上了一款叫做方块消除的游戏。游戏规则如下:n个带颜色方格排成一列,相同颜色的方块连成一个区域(如果两个相邻方块颜色相同,则这两个方块属于同一区域)。为简化题目,将连起来的同一颜色方块的数目用一个数表示。
例如,9 122233331表示为
4
1 2 3 1
1 3 4 1
游戏时,你可以任选一个区域消去。设这个区域包含的方块数为x,则将得到x^2个分值。方块消去之后,其余的方块就会竖直落到底部或其他方块上。而且当有一列方块被完全消去时,其右边的所有方块就会向左移一格。Jimmy希望你能找出得最高分的最佳方案,你能帮助他吗?

输入格式

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

输出格式

仅一个整数,即最高可能得分。

思路

我们考虑一段区域,设f[i][j]为这段区域的最优值,显然无法AC,因为有后面的接上去导致程度变化,那么需要设f[i][j][k]为从i到j的最优值,其中k表示后面接了k个一样的数字,那么,我们有了状态:
设f[i][j][k]为从i到j的最优值,其中k表示后面接了k个一样的数字

然后,我们考虑边界,显然,当i==j时:
结果=i的长度(设为len[i])+k的和的平方结果=i的长度(设为len[i])+k的和的平方结果=i的长度(设为len[i])+k的和的平方

然后我们考虑动态转移方程,每一个状态可以选择这样拆分:

  1. 我们把最后的地方吃掉(吃掉,吃掉,一定要吃掉),然后剩下的部分就是f[i][j-1][0]。
  2. 我们在前面寻找一个颜色(记为color[k])与最后一个一样的块,从这个块拆开,得到2个部分:f[i][k][0],f[k+1][r-1][len[r]+k]
    我们对这2种拆分取最大值即答案。

为了优化算法以应对接下来对付的多组数据(UVA10559)

code:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int m;
int len[60],color[60],dp[60][60][210];
int f(int l,int r,int last)
{int x=len[r]+last;if (l==r) return x*x;if (dp[l][r][last]!=-1) return dp[l][r][last];int mx=f(l,r-1,0)+x*x;for (int i=l;i<r;i++){if (color[i]==color[r]) mx=max(f(l,i,x)+f(i+1,r-1,0),mx);}dp[l][r][last]=mx;return mx;
}
int main()
{cin>>m;memset(len,0,sizeof(len));memset(color,0,sizeof(color));memset(dp,-1,sizeof(dp));for (int i=1;i<=m;i++){cin>>color[i]; }for (int i=1;i<=m;i++){cin>>len[i]; }cout<<f(1,m,0);return 0;
}

好了,我们回到PKU1390,发现我们相比前面一道题只需要处理2个点,一个是多组数据,一个是合并相同数字,非常简单,下面有代码实现:
code:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int m,n;
int len[210],color[210],dp[210][210][210];//注意范围啊
int f(int l,int r,int last)
{int x=len[r]+last;if (l==r) return x*x;if (dp[l][r][last]!=-1) return dp[l][r][last];int mx=f(l,r-1,0)+x*x;for (int i=l;i<r;i++){if (color[i]==color[r]) mx=max(f(l,i,x)+f(i+1,r-1,0),mx);}dp[l][r][last]=mx;return mx;
}
int main()
{int t;cin>>t;for (int j=1;j<=t;j++){cin>>n;m=1;memset(len,0,sizeof(len));memset(color,0,sizeof(color));memset(dp,-1,sizeof(dp));int x;cin>>color[m];len[m]=1;for (int i=1;i<n;i++){cin>>x;if (x==color[m]) len[m]++;else{m++;color[m]=x;len[m]=1;}//统计数字个数}cout<<"Case "<<j<<": "<<f(1,m,0)<<endl;}return 0;
}

PKU1390UVA10559方块消除+弱化版P2135相关推荐

  1. P2135 方块消除

    题目描述 Jimmy最近迷上了一款叫做方块消除的游戏.游戏规则如下:n个带颜色方格排成一列,相同颜色的方块连成一个区域(如果两个相邻方块颜色相同,则这两个方块属于同一区域).为简化题目,将连起来的同一 ...

  2. 素数定理π(n)~n/lnn弱化版证明

    在大半年前写的Miller-Rabin素数测试正确性证明中使用过此结论~当时完全不会证,现在进步了一点点会证弱化版的了Orz 完整版的素数定理: π(n):=|{p|p<=n,p是素数}| li ...

  3. 【方块消除】(附加工程)

    方块消除 一.引擎 二.游戏流程 图示 游戏 三.研发阶段 1.导入框架DLFramwork 2.Game游戏入口 3.GameMgr游戏管理类 4.BlockMgr主要提供可供全局访问的方块数组,是 ...

  4. CocosCreator 方块消除教程

    方块消除教程 <背景>--------------------------------------------------------------------.1 <方块>-- ...

  5. 第4-8课:方块消除游戏

    前面基础部分我们介绍过简单的串模型的动态规划,在这个系列中,我们又介绍了区间动态规划模型.状态压缩动态规划模型和线性动态规划模型.我们用的算法实现都是尽量使用状态递推关系式直接用递推的方法,大家可能都 ...

  6. 方块消除 UVA10559

    题意:给一排方块,每个方块有一个颜色,每次可以选几个连续颜色相同方块消除,得分为方块数平方,求最大总得分. 按照一般的序列dp思路,dp[i][j]应当从dp[i][k]和dp[k][j]中转移(i& ...

  7. 1109: 方块消除 blocks

    时间限制: 1 Sec 内存限制: 128 MB O2 提交: 127 解决: 59 [提交][状态][博客][加入收藏] 题目描述 Jimmy最近迷上了一款叫做方块消除的游戏. 游戏规则如下:N个带 ...

  8. p3371 单源最短路径(弱化版)-java题解-最短路

    弱化版传送门: P3371 [模板]单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通 ...

  9. 最短路——【模板】单源最短路径(弱化版)(dijkstra)

    题目链接 最短路--[模板]单源最短路径(弱化版)(dijkstra) 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入格式 第一行包含三个整数 n,m,s,分别表示点 ...

最新文章

  1. android 一个activity定时更新另一个activity的UI
  2. 对datatable进行linq过滤
  3. 独立线性度 最佳直线
  4. 7-142 最大子列和问题 (20 分)
  5. 华为linux配置ip地址命令是什么,华为S5700基础配置命令
  6. 软件评測师真题考试分析-5
  7. Spring 多线程下注入 bean 问题详解
  8. ASCII码常用范围
  9. 手把手教你配置国内镜像源
  10. Java学习笔记<2.3>面向对象
  11. 语句摘抄——第10周
  12. fb静态区域_FC 与 FB 与 OB 的区别,时间标记冲突与一致性检查 有详细的步骤...
  13. 云原生 | Docker:基础篇
  14. 头哥教学平台-泰坦尼克生还预测-可视化与探索性数据分析
  15. Java现在好找工作吗?
  16. Https接口异常javax.net.ssl.SSLHandshakeException问题
  17. Domino Web网页中更改密码比你想得简单得多
  18. 汇川H5U模拟量输入模拟量转换 FC S_ITR
  19. 通俗解释机器学习中的召回率、精确率、准确率
  20. 用纯css模拟下雪的效果

热门文章

  1. vscode缩放代码_Visual Studio Code 缩放设置
  2. Android答题计时的代码,Android答题倒计时
  3. 10分钟搞懂蚁群算法
  4. 机器学习(五)logistic回归进行二分类以及多分类(Python代码)
  5. 一篇文章带你认识数学建模中的二维插值
  6. 申论公文题-宣传类-1
  7. 网络协议实验四 ARP 协议分析实验
  8. 算法学习之狄克斯特拉算法
  9. Android面试基础之BroadcastReceiver详解(斗帝养成系列四)
  10. 【一周头条盘点】中国软件网(2018.2.26~2018.3.2)