首页 > 其他分享 >区间dp

区间dp

时间:2023-01-03 00:44:38浏览次数:70  
标签:int 合并 划分 区间 include dp

A

题目链接

核心思路:这很明显是一道区间dp板子题

集合定义:\(f[i][j]表示的是将序列的第i个数合并到第j个数\)全部合并所能得到的最大值。

集合划分:和石子合并的区间划分是一样的哦,先枚举长度,然后枚举左端点那么右端点也就确定了。然后我们再对区间里进行划分,这就是\(f[i][j]\)的子集。要注意有些状态是不合法的哦,划分的左右区间合并之后的是相等的才是合法的状态,也就是\(f[l][k]==f[k+1][r]\).

状态转移方程:

\(f[i][j]=max(f[i][j],f[i][k]+1)\).其中\(f[i][k]+1\)是因为这是题目要求的,需要我们两个相等的合并之后就是左区间或者是右区间的加1.

这里有个处理得比较好的地方就是f数组的储存,可以查看内存看一下。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long LL;
const int N = 3e2 + 10;
int f[N][N];

int n;
int main()
{
	int n;
	int ans = 0;
	cin >> n;
	for (int i = 1;i <= n;i++)
	{
		scanf("%d", f[i] + i);//表示只有一个元素的情况.
		ans = max(ans, f[i][i]);

	}
	for (int len = 2;len <= n;len++)
	{
		for (int l = 1;l + len - 1 <= n;l++)
		{
			int r = l + len - 1;
			for (int k = l;k < r;k++)
			{
				if (f[l][k] == f[k + 1][r] && f[l][k])
				{
					f[l][r] = max(f[l][r], f[l][k] + 1);
					ans = max(ans, f[l][r]);
				}
			}
		}
	}
	cout << ans << endl;
}

标签:int,合并,划分,区间,include,dp
From: https://www.cnblogs.com/xyh-hnust666/p/17020921.html

相关文章

  • TCP和UDP协议之间的区别,前端基础面试题
    前端基础面试题,TCP和UDP协议之间的区别tcp和udp作为传输层的两个协议,主要区别:1,tcp是面向链接的,(http协议握手)就类似打电话要先建立拨号,在进行链接。而udp在发送前......
  • Android Studio 新建drawable-hdpi、drawable-mdpi等
    AndroidStudio新建drawable-hdpi、drawable-mdpi在不同的模式“Project”/“Android”的文件夹中查看文件夹。如果文件夹丢失,您可以轻松添加它们。1、在“res”文......
  • Android Studio 新建drawable-xxhdpi,drawable-nodpi,drawable-hdpi,drawable-mdpi等
    AndroidStudio新建drawable-hdpi、drawable-mdpi在不同的模式“Project”/“Android”的文件夹中查看文件夹。如果文件夹丢失,您可以轻松添加它们。1、在“re......
  • 第十五章《网络编程》第4节:基于UDP协议的网络编程
    ​UDP协议是一种不可靠的网络协议,之所以说这种协议不可靠,是因为它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路。这两个Socket只是发送、接收数据报......
  • Codeforces 1389 B. Array Walk 做题记录(DP)
    (纯种的DP还是做得有点苦痛,调了好久。太菜了。)大概就是第一层枚举返回几次,第二层遍历一遍$1~n$。#include<bits/stdc++.h>usingnamespacestd;constintm......
  • 浅谈区间MEX问题
    区间MEX问题MEX是什么​ MEX:指一个序列中最小没有出现过的自然数。​ 例如\(mex\left\{1,2,0,3\right\}=4\),\(mex\left\{5,1,2,3\right\}=0\),\(mex\left\{0......
  • DP系列-最长回文子序列
    原题意:给你一个字符串s,找出其中最长的回文子序列,并返回该序列的长度。子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。回文序......
  • UDP套接字
     Datagram(数据报)是一种尽力而为的传送数据的方式,它只是把数据的目的地记录在数据包中,然后就直接放在网络上,系统不保证数据是否能安全送到,或者什么时候可以送到,也就是说它并......
  • 计数类dp
    例题:整数划分一个正整数\(n\)可以表示成若干个正整数之和,形如:\(n=n_1+n_2+…+n_k\),其中\(n_1≥n_2≥…≥n_k,k≥1\)。我们将这样的一种表示称为正整数\(n\)的一种......
  • 区间dp
    例题:石子合并设有\(N\)堆石子排成一排,其编号为\(1,2,3,…,N\)。每堆石子有一定的质量,可以用一个整数来描述,现在要将这\(N\)堆石子合并成为一堆。每次只能合并相邻的两......