POJ 1390 Blocks(区间DP)
Blocks
【题目链接】Blocks
【题目类型】区间DP
&题意:
给定n个不同颜色的盒子,连续的相同颜色的k个盒子可以拿走,权值为k*k,求把所有盒子拿完的最大权值
&题解:
这题是在16北大集训的pdf看见的,听说黑书上也有.它的那个多加一维真的很难想,dp方程现在也没怎么懂,先记一下吧,以后回来认真补
&代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int M = 210;
struct Segment {
int color;
int len;
};
Segment segments[M];
int score[M][M][M];
int ClickBox(int i, int j, int len) {
if(score[i][j][len] != -1)
return score[i][j][len];
int result = (segments[j].len + len) * (segments[j].len + len);
if(i == j) {
return result;
}
result += ClickBox(i, j - 1, 0);
for(int k = i; k <= j - 1; k++) {
if(segments[k].color != segments[j].color)
continue;
int r = ClickBox(k + 1, j - 1, 0);
r += ClickBox(i, k, segments[j].len + len);
result = max(result, r);
}
return score[i][j][len] = result;
}
int main() {
freopen("E:1.in", "r", stdin);
int T;
cin >> T;
for(int t = 1; t <= T; ++t) {
int n;
memset(score, -1, sizeof(score));
cin >> n;
int lastC = 0;
int segNum = -1;
for(int i = 0; i < n; i++) {
int c;
cin >> c;
if(c != lastC) {
segNum++;
segments[segNum].len = 1;
segments[segNum].color = c;
lastC = c;
}
else {
segments[segNum].len++;
}
}
cout << "Case " << t << ": " << ClickBox(0, segNum, 0) << endl;
}
}
POJ 1390 Blocks(区间DP)的更多相关文章
- POJ 1390 Blocks (区间DP) 题解
题意 t组数据,每组数据有n个方块,给出它们的颜色,每次消去的得分为相同颜色块个数的平方(要求连续),求最大得分. 首先看到这题我们发现我们要把大块尽可能放在一起才会有最大收益,我们要将相同颜色块合在 ...
- POJ 1390 Blocks(DP + 思维)题解
题意:有一排颜色的球,每次选择一个球消去,那么这个球所在的同颜色的整段都消去(和消消乐同理),若消去k个,那么得分k*k,问你消完所有球最大得分 思路:显然这里我们直接用二位数组设区间DP行不通,我们 ...
- POJ 1390 Blocks(记忆化搜索+dp)
POJ 1390 Blocks 砌块 时限:5000 MS 内存限制:65536K 提交材料共计: 6204 接受: 2563 描述 你们中的一些人可能玩过一个叫做“积木”的游戏.一行有n个块 ...
- POJ1390 Blocks (区间DP)
题目链接:POJ 1390.Blocks 题意: 有n个方块排成一列,每个方块有颜色即1到n的一个值,每次操作可以把一段相同颜色的方块拿走,长度为k,则获得的分数为 \(k\times k\),求可获 ...
- poj 1390 Blocks
poj 1390 Blocks 题意 一排带有颜色的砖块,每一个可以消除相同颜色的砖块,,每一次可以到块数k的平方分数.问怎么消能使分数最大.. 题解 此题在徐源盛<对一类动态规划问题的研究&g ...
- POJ 2995 Brackets 区间DP
POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间 ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- UVA10559&POJ1390 Blocks 区间DP
题目传送门:http://poj.org/problem?id=1390 题意:给出一个长为$N$的串,可以每次消除颜色相同的一段并获得其长度平方的分数,求最大分数.数据组数$\leq 15$,$N ...
- POJ 1179 - Polygon - [区间DP]
题目链接:http://poj.org/problem?id=1179 Time Limit: 1000MS Memory Limit: 10000K Description Polygon is a ...
随机推荐
- AtCoder Grand Contest 027 (AGC017) D - Modulo Matrix 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/AGC027C.html 题解 首先我们假装 max mod min = 1 然后对着这个构造. 将各自黑白染色, ...
- .net 本地日志的添加
/// <summary> /// 写入日志到文本文件 /// </summary> /// <param name="userName">用户 ...
- 微信小程序--家庭记账本开发--01
微信小程序的开发准备与开发工具的学习 在这次寒假伊始,临近春节,学习进程有所拉下,现在补上.寻找了好多网站的相关学习视频,包括微信公众平台关于小程序这方面也有好多相关资料供查阅. 1.开发准备: 首先 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第八课 增加喜欢功能(课堂笔记)
tornado 相关说明 新增一个页面,用来做图片收藏, 还要在 account.py 创建一个数据库表,记录用户喜欢的图片,哪些图片用户疯狂传奇 cd 到 项目目录下,执行数据库更新 alembic ...
- 使用python处理地理数据:Geopandas
说句实话处理地理数据使用python还是比较麻烦的
- Fiddler 教程---小坦克
协议. Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具 Fiddler的工作原理 Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1, 端口:888 ...
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...
- 版本管理_git
git 世界上最好的版本管理工具,分布式版本控制系统. 林纳斯-托瓦斯,自由主义教皇(git.linux) git 不管理空文件夹 对比于 SVN mkdir XX 创建一个空目录 XX ...
- __x__(41)0909第五天__长表格
长表格 银行流水,表格很长... 则需要将表格分为 表头 thead ,主体数据 tbody , 表格底部 tfoot 三个标签无顺序要求,易于维护:thead → tfoot → tbody 如果没 ...
- (68)Wangdao.com第十一天_JavaScript 数组的常用方法
数组的常用方法: 向数组末尾添加一个或多个元素,返回新长度 var arr = new Array(); arr.push("唐僧"); // 返回 1 删除数组最后一个元素,返回 ...