题目传送门(内部题133)


输入格式

  第一行一个正整数$n$。
  第二行$n$个正整数$a_i$,表示一开始有$S_i=\{a_i\}$


输出格式

  输出一个非负整数表示最大的收益之和


样例

样例输入:

4
1 2 2 2

样例输出:

5


数据范围与提示

样例解释:

  先合并第一个和第二个,得到$\{1,2\},\{2\},\{2\}$,产生的收益为$1$
  再合并第一个和第二个,得到$\{1,2\},\{2\}$,产生的收益为$2$
  再合并这两个,得到$\{1,2\}$,产生的收益为$2$
  所以答案是$5$

数据范围:

  对于$30\%$的数据,有$1\leqslant n\leqslant 7$
  对于$50\%$的数据,有$1\leqslant n\leqslant 50$
  对于$100\%$的数据,有$1\leqslant n\leqslant 300,1\leqslant a_i\leqslant n$


题解

感觉记忆化搜索比区间$DP$好打一些。

设$dp[l][r]$表示合并完$[l,r]$的最大收益,$con[l][r]$表示$[l,r]$区间内元素的个数($\Theta(n^3)$预处理即可,当然也可以用$bitset$做到$\Theta(\frac{n^3}{\omega})$,或者主席树做到$\Theta(n^2\log n)$)。

转移也很简单:

$$dp[l][r]=\max\limits_{i=l}^{r-1}dp[l][i]+dp[i+1][r]+con[l][i]\times con[i+1][r]$$

处理环的话无非就是断环为链即可。

时间复杂度:$\Theta(n^3)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n;
int a[601],con[601][601];
long long dp[601][601],ans;
bitset<300> v[601][601];
long long dfs(int l,int r)
{
if(l==r)dp[l][r]=0;
if(dp[l][r]!=-1)return dp[l][r];
for(int i=l;i<r;i++)
dp[l][r]=max(dp[l][r],dfs(l,i)+dfs(i+1,r)+1LL*con[l][i]*con[i+1][r]);
return dp[l][r];
}
int main()
{
memset(dp,-1,sizeof(dp));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i+n]=a[i];
}
for(int i=1;i<=2*n;i++)
{
v[i][i][a[i]]=con[i][i]=1;
for(int j=i+1;j<=2*n;j++)
{
v[i][j]=v[i][j-1];
v[i][j][a[j]]=1;
con[i][j]=v[i][j].count();
}
}
for(int i=1;i<=n;i++)ans=max(ans,dfs(i,i+n-1));
printf("%lld\n",ans);
return 0;
}

rp++

[CSP-S模拟测试]:集合合并(记忆化搜索)的更多相关文章

  1. HDU 3779 Railroad(记忆化搜索)

    Railroad Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Subm ...

  2. [CSP-S模拟测试]:彩球问题(记忆化搜索)

    题目传送门(内部题91) 输入格式 第一行一个正整数$N$,表示颜色种类数. 第二行$N$个正整数$k[i],k[i]$表示第$i$种颜色的数量$(1\leqslant k[i]\leqslant 3 ...

  3. 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】

    Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...

  4. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

  5. HDU-1428(记忆化搜索)

    Problem Description LL 最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU 校园呈方 ...

  6. 2017广东工业大学程序设计竞赛决赛 题解&源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱” ...

  7. 记忆化搜索 codevs 2241 排序二叉树

    codevs 2241 排序二叉树 ★   输入文件:bstree.in   输出文件:bstree.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 一个边长为n的正三 ...

  8. 最大联通子数组之和(dfs,记忆化搜索,状态压缩)

    最大联通子数组,这次的题目,我采用的方法为dfs搜索,按照已经取到的数v[][],来进行搜索过程的状态转移,每次对v[][]中标记为1的所有元素依次取其相邻的未被标记为1的元素,将其标记为1,然而,这 ...

  9. HDU 4597 Play Game(记忆化搜索,深搜)

    题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...

随机推荐

  1. springboot2.X版本得@Transactional注解事务不回滚不起作用

    参考文章  https://my.oschina.net/happyBKs/blog/1624482   https://blog.csdn.net/u011410529/article/detail ...

  2. Robot Framework(一)安装笔记

    参考网址:https://www.cnblogs.com/yinrw/p/5837828.html因为自己安装了py,网上教程都是统一安装py2.7开始的. 所以这里总结下安装笔记:cmd命令界面进行 ...

  3. access数据库根据指定日期进行查询

    获取指定日期的记录 1.select Field1 from  A  where format("yyyy-MM-dd",Field1)=#2011-10-07# 有时不能获取记录 ...

  4. mysql中有条件的插入语句

    今天在参加笔试的过程中,看到一道题,大概意思就是说,当满足了条件就执行插入语句,当时就蒙了,之前从来都没有考虑过满足条件才插入的情况,所以一直都是这样写的 insert into table_name ...

  5. Hadoop环境安装和集群创建

    虚拟机使用vmware,vmware可以直接百度下载安装 秘钥也能百度到 安装很简单 CentOS 7下载: 进入官网 https://www.centos.org/download/ 这里有三种 第 ...

  6. 09 Python两种创建类的方式

    第一种比较普遍的方式: class Work(): def __init__(self,name): self.name = name w = Work('well woker') 这样就简单创建了一 ...

  7. java接口自动化测试小dome

    GitHub地址:https://github.com/leonInShanghai/InterfaceAutomation 这个dome 请求 https://www.v2ex.com/api/no ...

  8. Oracle DBA 学习总结

    对于学习Oracle 数据库,应该先要了解Oracle 的框架.它有物理结构(由控制文件.数据文件.重做日志文件.参数文件.归档文件.密码文件组成) ,逻辑结构(表空间.段.区.块),内存分配( SG ...

  9. 1.(基础)tornado初识

    tornado的话就不带着大家看源码了,今后可能会介绍,目前只是看简单的用法,而且当前的tornado版本不高,其实说白了这是很久以前写的文档,但是由于格式的原因,所以打算用Markdown重写一次. ...

  10. 小伙伴们来看啊!开源智能机 Librem 5 规格发布。

    下图是 Librem 5 的高配版规格: (看到这配置,忍不住吐槽一句:放到三年前都看不上……) Librem 5 的更详细规格如下: CPU: i.MX8M @ max. 1.5GHz 四核 Cor ...