P1063 [NOIP2006 提高组] 能量项链 题解

该博客讨论了如何使用动态规划解决NOIP2006提高组的「能量项链」问题。通过分析合并珠子的能量公式和最优子结构,提出将项链展开并进行dp计算的方法。通过优化,将时间复杂度从O(n^4)降低到O(n^3),解决了大数据可能导致的超时问题。
摘要由CSDN通过智能技术生成

简单的说:给你一项链,项链上有n颗珠子。相邻的两颗珠子可以合并(两个合并成一个)。合并的同时会放出一定的能量。不同的珠子的合并所释放的能量是不同的。问:按照怎样的次序合并才能使释放的能量最多?

我们用top表示第i颗珠子的头标记,用wei表示第i颗珠子的尾标记,合并两颗相邻珠子所释放的能量是:

Q=top*wei*wei[i+1Q=top∗wei∗wei[i+1]或 top*top[i+1]*wei[i+1]top∗top[i+1]∗wei[i+1];

(一个样的)

合并不一定按顺序的,本题所提供的样例也是导致出错的一大原因。

nn个珠子进行一次合并的后,就归结到了n-1n−1个珠子的合并的问题。所以我们想到了动态规划。

既然是dpdp题目,必然要满足dpdp的两大条件:

1.最优子结构性质;   设Q[i,j]Q[i,j]表示第i颗珠子到第j颗珠子合并所产生的能量。显然Q[1,n]Q[1,n]表示的是合并产生的总的能量。给定一种标号方法,maxQ[1,n]maxQ[1,n]就是所要求的。设最后一次合并在kk处进行,则有Q[1,n]=Q[1,k]+Q[k+1,n]+top[1]*wei[k]*wei[n]Q[1,n]=Q[1,k]+Q[k+1,n]+top[1]∗wei[k]∗wei[n]。要Q[1,n]Q[1,n]最大,必然要Q[1,k]Q[1,k],Q[k+1,n]Q[k+1,n]最大。

证明:假设Q[1,k]Q[1,k]不是最大,则必然存在一Q'[1,k]>Q[1,k]Q′[1,k]>Q[1,k]。那么就有Q'[1,n]=Q'[1,k]+Q[k+1,n]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值