题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void (async function () { // Write your code here // while(line = await readline()){ // // let tokens = line.split(' '); // // let a = parseInt(tokens[0]); // // let b = parseInt(tokens[1]); // // console.log(a + b); // } //不同的种类之间可以联合 同一个种类不同的数量需要枚举 let typeNum = await readline(); typeNum = +typeNum; let typeStr = await readline(); let typeList = typeStr.split(" ").map((item)=>+item); let numStr = await readline(); let numList = numStr.split(" "); // let typeEnumMatrix=typeList.map((weight,i)=>{ // let num=+numList[i] // let list=new Array((num+1)).fill(0).map((num,i)=>{ // return (i)*weight // }) // return list // }) // 注意如果使用typeEnumMatrix 内存会溢出 // 第二个是不同作用域的变量尽量不要重复 ,如果子作用域的变量跟父级重复,有可能取不到父级作用域的值 let res=typeList.reduce((prevSet,item,i)=>{ // let countList=[] let prev=[...prevSet] let num=+numList[i] let typeNum=typeList[i] for(let i=0;i<prev.length;i++){ let pItem=prev[i] for(let j=0;j<=num;j++){ let single=j*typeNum let addNum=single+pItem if(!prevSet.has(addNum)){ prevSet.add(addNum) } } } // console.log(prevSet) return prevSet },new Set([0])) console.log(res.size) })();