题解 | #购物单#

购物单

https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4

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
    const primary = {};
    const annex = {};
    const f = new Array(32000).fill(0);
    line = await readline();
    let tokens = line.split(" ");
    let N = parseInt(tokens[0]); // 总钱数
    let m = parseInt(tokens[1]); // 总物品数
    for (let i = 1; i <= m; ++i) {
        let temp = await readline();
        let arr = temp.split(" ").map((ele) => parseInt(ele));
        if (arr[2] == 0) primary[i] = [arr[0], arr[1]];
        else {
            // 第二个附件
            if (Object.keys(annex).includes(arr[2].toString())) {//Object对象的键会自动转换为字符串类型
                annex[arr[2]][1] = [arr[0], arr[1]];
            } else {
                // 第一个附件
                //初始化一个二维数组
                annex[arr[2]] = new Array(2).fill(0).map(() => new Array(2).fill(0));
                annex[arr[2]][0] = [arr[0], arr[1]];
            }
        }
    }

    for (let key in primary) {
        //v_temp:价格,sa_temp:满意度
        const v_temp = [],
            sa_temp = [];
        // 1. 只有一个 主件
        v_temp.push(primary[key][0]);
        sa_temp.push(primary[key][0] * primary[key][1]);
        // 存在附件
        if (key in annex) {
            // 2. 主件 + 附件1
            v_temp.push(v_temp[0] + annex[key][0][0]);
            sa_temp.push(sa_temp[0] + annex[key][0][0] * annex[key][0][1]);
            // console.log(`annex[${key}]:${annex[key]}`);
            if (annex[key].length > 1) {
                //存在两个附件
                // 2. 主件 + 附件2
                v_temp.push(v_temp[0] + annex[key][1][0]);
                sa_temp.push(sa_temp[0] + annex[key][1][0] * annex[key][1][1]);
                // 3. 主件 + 附件1 + 附件2
                v_temp.push(v_temp[0] + annex[key][0][0] + annex[key][1][0]);
                sa_temp.push(
                    sa_temp[0] +
                        annex[key][0][0] * annex[key][0][1] +
                        annex[key][1][0] * annex[key][1][1]
                );
            }
        }
        // console.log('v_temp:',v_temp);
        // console.log('sa_temp:',sa_temp);

        for (let j = N; j >= 0; j -= 10) {
            for (let k in v_temp) {
                if (j - v_temp[k] >= 0) {
                    f[j] = Math.max(f[j], f[j - v_temp[k]] + sa_temp[k]);
                }
            }
        }
    }
    console.log(f[N]);
})();

全部评论

相关推荐

吴offer选手:我卡在笔试才是最好笑的,甚至没给我发过笔试链接
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
04-11 23:51
门头沟学院 Java
坚定的芭乐反对画饼_许愿Offer版:人人都能过要面试干嘛,发个美团问卷填一下,明天来上班不就好了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务