平面上有n(3<=n<=100)个房间围成一圈,编号分别为 1~n,相邻的两个房间之间均有一扇门,第i个房间最多居住人数为a(i)。初始时选择一个房间,将所有人都聚集在该房间,接着每个人都可以顺时针方向走到相邻的房间,直到找到居住的房间。最后每个房间刚好住满。一个人每经过一扇门花费1的能量,请确定初始房间及每个人找房间的方案,使得所有人花费的能量的和最小。例如:n = 5,a(1)= 4,a(2)= 7 ,a(3)= 8,a(4)= 6,a(5)= 4。
最佳方案为初始时所有人聚集在2号房间花费的最小能量为7*0+8*1+6*2+4*3+4*4=48。
实现上述功能的 VB 代码如下,但加框处代码有错,请改正。
Dim a( 1 To 100) As Integer '依次存储编号为 1 到 100 的房间的最多居住人数
Private Sub Form_Load()
'产生N的值
'本过程从数据库中依次读取编号为1到 N的房间的最多居住人数,并存储在数组a中
'代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, w As Integer
Dim t As Long, ans As Long
ans = 32767
For i=1 To n
t = 0
For j=0 To n-1
‘(1)
If w=0 Then w=n
‘(2)
Next j
If t < ans Then ans = t
Next i
Text2.Text = Str(ans)
End Sub
以上程序段运行时,为了实现上述功能,加框处代码应改正为:
⑴{#blank#}1{#/blank#};⑵{#blank#}2{#/blank#}。