动态规划——把一个整数数组分成两个和相等的子集,怎么写
当数组nums=[2,3,5]时,测试通过,但当nums=[5,3,2]时,测试就不能通过,这是为什么?
window.onload = function() {
//nums = [3,2,5];
nums=[5,3,2];
console.log("****************"+canPartition(nums))
}
var canPartition = function(nums) {
var totleSum = 0;
var minNums = Math.min.apply(null, nums);
for (var i = 0; i < nums.length; i++) totleSum += nums[i];
if (totleSum % 2 !== 0) return false;
var target = totleSum / 2;
var len = nums.length;
var value = nums;
var dp = new Array();
var str = [];
for (var i = 0; i < len; i++) {
// dp[i] = new Array();
dp[i] = [];
}
for (var i = nums[0]; i <= target; i++) {
dp[0][i] =value[0];
console.log(dp[0][i]);
}
console.log("----------------");
for (var i = 1; i < len; i++) {
str = [];
for (var j = target; j >=nums[i] ; j--) {
var q = dp[i - 1][j];
if(q === NaN || q === undefined)
console.log("j:" + j + " " +"i-1:"+(i-1)+" "+ "nums[i]:" + nums[i] + " " + "dp[i-1][j]:" + dp[i - 1][j]);
var x = dp[i - 1][j - nums[i]];
if (x === undefined || x === NaN){ x=0;
console.log("j:" + j + " " +"i-1:"+(i-1)+" "+ "nums[i]:" + nums[i] + " " + "dp[i-1][j-nums[i]] + value[i]:" + z);}
var y = value[i];
var z = x + y;
dp[i][j] = Math.max(q, z);
console.log(dp[i][j]);
}
}
if (dp[len - 1][target] === target) return true;
else return false;
};
相关阅读:
svn添加忽略文件夹无效
jwplayer皮肤的修改
myeclipse引用别人发布的webservice报错
js动态获取服务器时间显示在页面时为什么会延迟一两秒?
自动生成数组或其它数据的java库?
汉诺塔递归问题解释
微信服务号商城进行购买时,微信提示登录验证已过期,请重新登录。这是什么原因。
JavaScript中标签页切换时一闪而过,无法切换,只停留在默认的第一页
vue中使用...扩展符为什么会报unexpected token的语法错误?
在什么情况下用自执行函数比较好?
有什么办法快速把网站套一层皮变成手机上的app?
js闭包谁能给我讲讲?
c++ 隐式向上转换的向上指什么?
现在最新Discuz启用全站https有没有问题了?
xampp 虚拟主机设置问题
购物车商品数量加减效果
mysql中和钱有关的字段应该用什么类型好
如何做一个优秀的团队组长?
laravel 5.2.22 认证登录的问题。
c语言switch结构+循环题目