返回信息流输入:
A={a,b,c...}
B={b,e,f...}
...
Z={c,m,q...}
A-Z,序列之间可能有重复的元素(比如上文中的b,c等)
a、b、c有自己的权值。
问题:
现在需要遍历A-Z,每访问一个,需要将(X)所包含的元素放入容器M,访问完可以将后面遍历不会再被用到的元素n从M中移除。
什么样的遍历顺序,能保证M内的权值和最小(或者近似最小)
例子:
A={a, b}
B={b, c}
v(a)=1,v(b)=2,v(c)=3
顺序 A,B
1、访问A:M(A)=v(a)+v(b)=3
2、a不会再被访问,移除a:M(A)=v(b)=2
3、访问B:M(B)=v(b)+v(c)=5
结果:M的遍历峰值为5
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #93788同步于 2017/7/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
求教这个算法
hellfire01
2017/7/29镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
这个例子的话是想说按照B,A的顺序会得到更优解吧,那样M内权值最后是3。感觉如果M内不会有多个a,b,c....话只要算一下A,B,C...的最小权重就好了?不懂莫怪
【 在 w350053002 的大作中提到: 】
: 这个例子的话是想说按照B,A的顺序会得到更优解吧,那样M内权值最后是3。感觉如果M内不会有多个a,b,c....话只要算一下A,B,C...的最小权重就好了?不懂莫怪
sorry,例子举的不太好,B,A顺序 M的最大值也是5
不是说最后权值多少,而是在整个遍历过程中,M权值的峰值最小
再举个例子吧
A={a,b}
B={b,c}
C={a}
a=1, b=2, c=3
顺序A-B-C:
M的变化是 {a,b} -> {a,b,c} -> {a}
权值变化为3->6->1,峰值为6
顺序C-A-B:
M的变化是 {a} ->{a,b}->{b}->{b,c}
{a,b}->{b}是因为检测到后面的遍历不会再需要a,所以可以将a移除。
M的权值变化为1->3->2->5,峰值为5。
所以C-A-B比A-B-C要更优。