【发布时间】:2017-03-16 04:34:58
【问题描述】:
我在解决我的练习时遇到了问题。我阅读了动态编程和算法,我认为我的练习是“特定的背包问题”。我用蛮力方法解决了,但我不能用动态规划解决它。
我有一艘重 300 吨的船(背包)。有晶体本身具有 3 种物质(X、Y、Z)——每种物质都有重量,所有晶体都具有相同的值。我需要打包运送尽可能多的水晶,但所有打包水晶的物质比例必须是 1:1:1。但是例如,如果我有三个比例为 1:1:1 的晶体提供最大的吨数和八个晶体提供相同的吨数(其他两种晶体组合提供最大的吨数)我需要选择晶体数量最少的组合。
我用蛮力方法解决了这个问题 - 我创建了一个包含所有组合的数组列表。接下来我发现它们以 1:1:1 的比例组合在一起。接下来,我找到了吨数最多且晶体数最少的组合(如果有两个或多个组合具有相同的最大吨数)。我检查了测试,它返回了很好的分数, 我不知道如何用动态编程解决它;/ 有人帮助我吗?
例如当我有 10 个水晶时:
1) X =2 Y =3 Z =4
2) X =5 Y=10 Z =2
3) X =3 Y =3 Z =3
4) X =1 Y =0 Z =6
5) X =9 Y=12 Z =4
6) X =1 Y =1 Z =1
7) X =2 Y =1 Z=0
8) X =1 Y =2 Z =3
9) X =1 Y =1 Z =1
10) X =4 Y =3 Z =3
解决方案是:最多 27 吨,五个晶体(数字:1、3、6、7 和 9)
【问题讨论】:
-
请发布您的代码、您面临的错误以及您面临的具体问题。如需更通用的指南,请查看my answer。
标签: java algorithm dynamic knapsack-problem