题解 | #称砝码#
称砝码
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)
})();