欢迎光临散文网 会员登陆 & 注册

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] );


CF竞赛题目讲解_CF1312E(DP+双数组)的评论 (共 条)

分享到微博请遵守国家法律