平面上有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=1To n
t=0
For j=0 To n-1
‘①
If w=0 Then w=n
‘②
Next j
If t<ans Then ans=t
Next i
Text2.Text=Str(ans)
End Sub
以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②。
答案:【1】w=(i+j)Mod n【2】t=t+ a(w)*j