| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1684 人关注过本帖
标题:我写了个背包问题,好象已经解决了-->multiple1902转移
取消只看楼主 加入收藏
Benison
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-6-23
收藏
 问题点数:0 回复次数:5 
我写了个背包问题,好象已经解决了-->multiple1902转移
我刚写的背包问题,在测试一些数据时出现了点问题,麻烦高手指点一下!

Dim p, x, y As Integer
Private Sub Form_click()
y = InputBox("input y , 1<y<100") '输入值,y表示物品数,p表示最大承受物品能力,a(1,y)表示各个背包所拥有的
p = InputBox("input p") 物品数,a(2,y)表示各个背包的价值
Dim a(1 To 100, 1 To 100) As Integer
For i = 1 To 2
For j = 1 To y
a(i, j) = InputBox("input a(i, j)")
Next
Next
j = 2
Do '升序排列
For i = j To y
If a(1, j - 1) > a(1, i) Then
t = a(1, j - 1)
a(1, j - 1) = a(1, i)
a(1, i) = t
t = a(2, j - 1)
a(2, j - 1) = a(2, i)
a(2, i) = t
End If
Next i
j = j + 1
Loop Until j > y
Dim max As Integer
Dim m As Integer
Dim n As Integer
Dim k As Integer
max = 0
m = 0
n = 0
k = 1
Call try(p, max, m, n, k, a())
Print max
End Sub

Private Sub try(ByVal p As Integer, ByRef max As Integer, ByVal m As Integer, ByVal n As Integer, ByVal k As Integer, ByRef a() As Integer)
For i = k To y
If m + a(1, i) <= p Then
m = m + a(1, i)
n = n + a(2, i)
k = i
Else
Exit For
End If
Next i
If n > max Then
max = n
End If
m = m - a(1, k)
n = n - a(2, k)
k = k - 1
If k > 0 Then
Call try(p, max, m, n, k, a())
End If
End Sub
当 y=5且数组a()各项都为 1 ,p=10 时,便出现了错误,本来应该输出5,它却输出了10,也就是p的值

[此贴子已经被作者于2007-8-29 11:50:56编辑过]

搜索更多相关主题的帖子: 背包 input 物品 InputBox 
2007-08-28 10:58
Benison
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-6-23
收藏
得分:0 
补充一下
背包问题:
在M件物品取出若干件放在空间为W的背包里,每件物品的重量为W1,W·2……Wn,与之相对应的价值为P1,P2……Pn。求出获得最大价值的方案。
注意:在本题中,所有的重量值均为整数。

麻烦高手出来指导一下!!!

2007-08-28 20:50
Benison
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-6-23
收藏
得分:0 
斑竹就是不一样!!!

2007-08-28 21:50
Benison
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-6-23
收藏
得分:0 
我重新修改了一下过程,感觉好象没什么问题了,请问谁有背包问题的数据能让我测试一下?!
Private Sub try(ByVal p As Integer, ByRef max As Integer, ByVal m As Integer, ByVal n As Integer, ByVal k As Integer, ByRef a() As Integer)
If k < y Then
Call try(p, max, m, n, k + 1, a())
End If
For i = k To y
If m + a(1, i) <= p Then
If k < y - 1 Then
Call try(p, max, m, n, k + 1, a())
End If
m = m + a(1, i)
n = n + a(2, i)
k = i
If n > max Then
max = n
End If
Else
Exit For
End If
Next i
End Sub

2007-08-29 10:26
Benison
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-6-23
收藏
得分:0 

楼上两位斑竹能不能具体说一下你们的意思!!!


2007-08-30 11:46
Benison
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-6-23
收藏
得分:0 
以下是引用卧龙孔明在2007-9-1 9:42:25的发言:
典型DP
countline 2循环
这里有我写的:
1.http://program.xuntan.com/dispbbs.php?boardid=2&id=35&page=1
2.http://program.xuntan.com/dispbbs.php?boardid=2&id=42&page=1
3.http://program.xuntan.com/dispbbs.php?boardid=2&id=5&page=1
4.http://program.xuntan.com/dispbbs.php?boardid=2&id=2&page=1

好象是别的论坛的,看不到啊?


2007-09-01 11:52
快速回复:我写了个背包问题,好象已经解决了-->multiple1902转移
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017622 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved