鉴于可以改变数字的符号,找到数组的最小总和

use*_*919 6 arrays dynamic-programming

我在编码比赛中遇到了这个问题 -

你得到一个正整数数组,并允许你随时改变任何整数的符号.编写程序来计算该数组的最小总和.这个总和应该> = 0.例如:Array = {1,2,4,5}然后sum = 0,因为我们改变了1和5的符号{-1,2,4,-5}

我对这个问题的解决方案是对数组进行排序并找到所有成员的总和.然后,我将从最大数字开始迭代地减少2*(排序数组值) - 直到sum变为0或直到它变为负数.

但我的解决方案是错误的.拿12,13,14,15,16,50.我的代码会将50更改为-50并停止(即最小总和= 20).但答案应该是12,-13,-14,-15,-16,50(最小值= 4)

son*_*glj 8

这个问题可以改成一个傻瓜问题

考虑这个问题:

你得到n个整数,显然,你可以计算这些数的总和,假设它是S.

您现在需要从中选择一组数字,并且旨在将这些选定的数字加起来尽可能接近S/2

这可以使用DP算法来完成,这与knap-sack问题非常相似

你能现在做吗?:)

这篇文章只是一个提示,如果你需要更多帮助,我可以提供更多细节