题解 | #称砝码#
称砝码
http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
动态规划思路可行,但是有待优化
如果使用一维数组存储各个状态的值,最后一个测试用例过不了
// 不使用动态规划 思路类似动态规划
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;
// }