题解 | #称砝码#

称砝码

http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

动态规划思路可行,但是有待优化

如果使用一维数组存储各个状态的值,最后一个测试用例过不了 alt alt

// 不使用动态规划  思路类似动态规划
let n=Number(readline());
let weights=readline().split(' ').map(Number);
let nums=readline().split(' ').map(Number);
let map=[0];
for(let i=0;i<n;i++){
  for(let j=1;j<=nums[i];j++){
    let tmpArr=[...map];
    let newArr=arrAddN(tmpArr,weights[i]);
    map=[...new Set([...tmpArr,...newArr])];
  }
}
console.log(map.length);
function arrAddN(arr,n){
  return arr.map(item=>item+n)
}




//使用动态规划
// let total=arrMulti(weights,nums);
// //console.log(total);
// let dp=new Array(total+1).fill(0);
// dp[0]=1;
// dp[total]=1;
// for(let i=0;i<n;i++){  //遍历每一种砝码
//   for(let j=1;j<=nums[i];j++){  //遍历砝码每一个数量
//     let tmpdp=[...dp];
//     for(let k=0;k<total-weights[i];k++){
//       if(dp[k]){
//         tmpdp[k+weights[i]]=1;
//       }
//     }
//     dp=tmpdp;
//   }
// }

// let res=dp.reduce((pre,cur)=>pre+cur,0);
// console.log(res);

// function arrMulti(arr1,arr2){
//   let total=0;
//   for(let i=0;i<arr1.length;i++){
//     total+=arr1[i]*arr2[i];
//   }
//   return total;
// }



全部评论

相关推荐

神哥了不得:你简历字体有点不太协调呀,下面的字实在太小了呀,而且项目也不太行,建议换几个高质量的项目,面试会多很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务