返回信息流dp求括号正则化序列最少字符问题。
for (k = 1; k < len; k++) {
for(i = 0; i + k < len; i ++){
j = i + k;
dp[i][j] = 0x7fffffff;
if(match(i, j)){//如果当前位置匹配,那么pos置-1
dp[i][j] = dp[i+1][j-1] , pos[i][j] = -1;
}
for(mid = i; mid < j; mid++){
if(dp[i][j] > (t = dp[i][mid] + dp[mid+1][j])){//如果存在更优分解,那么选择更优分解
dp[i][j] = t, pos[i][j] = mid;
}
}
}
}
第一层循环和第二次循环是什么意思,为什么要这样定义循环结构。
题解抄自https://blog.csdn.net/svitter/article/details/25186367
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #98077同步于 2019/7/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
求教POJ1141
gjhang
2019/7/7镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
这玩意儿是分段DP啊,分段DP就长这样
第一层循环是枚举起点,第二层是枚举长度(其实是通过枚举长度来计算终点),第三层是枚举断点
感觉如果你不能理解,试着把这种dp转成递归的形式,用记忆话去写一下,可能会更直观一些
我懂了,谢谢~
【 在 whn6325689 (Mr. Phoebe) 的大作中提到: 】
: 这玩意儿是分段DP啊,分段DP就长这样
: 第一层循环是枚举起点,第二层是枚举长度(其实是通过枚举长度来计算终点),第三层是枚举断点
: ...................