javascript - 动态规划——把一个整数数组分成两个和相等的子集,怎么写
天蓬老师
天蓬老师 2017-04-11 13:33:31
[JavaScript讨论组]

当数组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;

};

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号