CF竞赛题目讲解_CF1312E(DP+双数组)
2022-08-22 16:53 作者:Clayton_Zhou | 我要投稿
https://codeforces.com/problemset/problem/1312/E
题意:
给定n个数,每次选两个相等且相邻的数a[i]=a[i+1]合并变成a[i],求数列最小长度
思路:
动态规划使用两个数组
用dp[i][j]表示将区间 [i,j]压缩后的长度, 区间[i,j]的初始dp值为0X7F7F7F7F
用num[i][j]表示将区间 [i,j]压缩成一个数字后的数字, 区间[i,j]的初始值为0
状态转移方程:
①(dp[l][k] == 1 && dp[k+1][r] == 1 && num[l][k] == num[k+1][r]) dp[l][r] = 1, num[l][r] = num[l][k] + 1;
①的情况不需要执行②,因为dp[l][r]=1;已经最小,
②dp[l][r] = min(dp[l][r],dp[l][k_1 ] + dp[k_1+1][r] );