没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
能量项链 (NOIP2006-1)
•
在 Mars 星球上,每个 Mars 人都随身佩带着一串能
量项链。在项链上有 N 颗能量珠。能量珠是一颗有头标
记与尾标记的珠子,这些标记对应着某个正整数。并且,
对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后
一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是
Mars 人吸收能量的一种器官)的作用,这两颗珠子才
能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。
如果前一颗能量珠的头标记为 m ,尾标记为 r ,后一
颗能量珠的头标记为 r ,尾标记为 n ,则聚合后释放的
能量为( Mars 单位),新产生的珠子的头标记为 m ,
尾标记为 n 。
•
需要时, Mars 人就用吸盘夹住相邻的两颗珠子,
通过聚合得到能量,直到项链上只剩下一颗珠子为
止。显然,不同的聚合顺序得到的总能量是不同的,
请你设计一个聚合顺序,使一串项链释放出的总能
量最大。
•
例如:设 N=4 , 4 颗珠子的头标记与尾标记依次
为 (2 , 3) (3 , 5) (5 , 10) (10 , 2) 。我们用记
号⊕表示两颗珠子的聚合操作, (j k)⊕ 表示第 j , k
两颗珠子聚合后所释放的能量。则第 4 、 1 两颗珠
子聚合后释放的能量为: (4 1)=10*2*3=60⊕ 。
•
这一串项链可以得到最优值的一个聚合顺序所释放
的总能量为
•
((4 1) 2) 3⊕ ⊕ ⊕ ) =10*2*3+10*3*5+10*5*10=710 。
【输入文件】
•
输入文件 energy.in 的第一行是一个正整数
N ( 4≤N≤100 ),表示项链上珠子的个数。第二
行是 N 个用空格隔开的正整数,所有的数均不超过
1000 。第 i 个数为第 i 颗珠子的头标记( 1≤i≤
N ),当 i 时,第 i 颗珠子的尾标记应该等于第 i+1
颗珠子的头标记。第 N 颗珠子的尾标记应该等于第 1
颗珠子的头标记。
•
至于珠子的顺序,你可以这样确定:将项链放到桌面
上,不要出现交叉,随意指定第一颗珠子,然后按顺
时针方向确定其他珠子的顺序。
【输出文件】
•
输出文件 energy.out 只有一行,是一个正整数 E
( E≤2.1*10^9 ),为一个最优聚合顺序所释放的
总能量。
分析
•
先枚举一个位置 p ,将珠子变成一条链。设链中的第 i
颗珠子头尾标记为 (S
i-1
与 S
i
) 。令 G[i,j] 表示从第 i
颗珠子一直合并到第 j 颗珠子所能产生的最大能量,则:
G[i,j]=min{G[i,k]+G[k+1,j]+S
i-1
*S
k
*S
j
,
i<=k<j}
•
边界条件:
G[i,i]=0
最后的最优解为 G[1,n]
•
该算法需要枚举 p,i,j,k ,而且每一重枚举都是 O(n) ,
所以总的时间复杂度为 O(n
4
) ,而 n 可能有 100 ,因
此直接实现这个算法有超时的危险。
剩余47页未读,继续阅读
资源评论
gmsz999
- 粉丝: 0
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功