区间dp-进阶题目1(进阶合并)

解题思路

这题区间dp用的很妙。我们先用dp数组存储区间内能合并的值,如果无法合并存为-1。之后再用线性dp记录前iii个数能合并的最小值。

AC Code

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=505;
int n,a[maxn],f[maxn],dp[maxn][maxn];
int main(){
	cin>>n;
	memset(f,0x3f,sizeof(f));
	f[0]=0;
	for(int i=1;i<=n;i++) {
		cin>>a[i];
		dp[i][i]=a[i];
	}
	for(int lenn=2;lenn<=n;lenn++){
		for(int l=1,r=lenn+l-1;r<=n;l++,r++){
			dp[l][r]=-1;
			for(int k=l;k<r;k++)
				if(dp[l][k]==dp[k+1][r]&&dp[l][k]!=-1)
					dp[l][r]=dp[l][k]+1;
		}
	}
	for(int i=1;i<=n;i++){
		if(dp[1][i]>-1){
			f[i]=1;
			continue;
		}
		f[i]=f[i-1]+1;
		for(int j=1;j<i-1;j++){
			if(dp[j+1][i]>-1) f[i]=min(f[i],f[j]+1);
		}
	}
	cout<<f[n];
	return 0;
} 
相关推荐
To_OC6 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_841495647 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
fqbqrr7 小时前
2607C++,soui与安卓
c++·soui
fqbqrr10 小时前
2607C++,使用微软detours勾挂工具
c++
爱刷碗的苏泓舒11 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
蓝悦无人机13 小时前
C++基础 — 函数总结
开发语言·c++
烬羽13 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米13 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
REST_302714 小时前
告别Excel孤岛:一款任务链路可视化工具带来的真实改变
大数据·微服务·云计算·编辑器·excel·动态规划