题解 | #称砝码#

称砝码

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;
// }



全部评论

相关推荐

今天投了小鹏,收到了AI面,大概会问哪些啊?
期末一定及格:总共4个部分,心理测评、行测、然后就是问岗位、对岗位的理解、过往遇到了哪些难点怎么解决,很简单,没有什么特别专业的问题,都是一些综合素质相关的
小鹏汽车AI面4人在聊
点赞 评论 收藏
分享
06-15 18:44
黄淮学院 Java
Lynn012:如果是居民楼还是算了吧,看着有点野呢
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
把实习生当正职使昨天第一天就加班,晚上连口饭都没吃上,以后日子咋过,我不想干了
码农索隆:实习不怕忙,就怕干的活重复且没难度,要干就干那种有深度有难度的任务,这样才能快速的提升
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务