题解 | #购物单#

购物单

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

import java.io.*;
import java.util.*;
import java.lang.Math;

public class Main {
    public static void main(String[]args) throws IOException {

        Scanner in = new Scanner(System.in);

        int money = in.nextInt();
        int count = in.nextInt();

        int[] v = new int[count + 1];
        int[] p = new int[count + 1];
        int[] q = new int[count + 1];
        int[] f1 = new int[count + 1];
        int[] f2 = new int[count + 1];

        boolean flag = true;
        int dw = 100;

        // 数据录入
        if (money == 0 || count == 0) {
            System.out.println(0);
            return;
        }

        for (int i = 1 ; i < count + 1; i++) {

            v[i] = in.nextInt();
            if (flag && v[i] % dw != 0) {
                dw = 10;
                flag = false;
                for (int m = 1 ; m < i ; m++) {
                    p[m] *= 10;
                    v[m] *= 10;

                }

            }
            v[i] = v[i] / dw;
            p[i] = in.nextInt() * v[i];
            q[i] = in.nextInt();

            if (q[i] > 0) {

                if (f1[q[i]] == 0) {
                    f1[q[i]] = i;

                } else {
                    f2[q[i]] = i;
                }

            }

        }

        // 处理数据
        money /= dw;
        int[][] dp = new int[count + 1][money + 1];

        for (int i = 1 ; i < count + 1 ; i++) {

            int p1 = 0, p2 = 0, p3 = 0;
            int v1 = -1, v2 = -1, v3 = -1;

            if (f1[i] != 0) {
                v1 = v[i] + v[f1[i]];
                p1 = p[i] + p[f1[i]];

            }


            if (f2[i] != 0) {
                v2 = v[i] + v[f2[i]];
                p2 = p[i] + p[f2[i]];

            }


            if (f1[i] != 0 && f2[i] != 0) {
                v3 = v1 + v2 - v[i];
                p3 = p1 + p2 - p[i];

            }


            for (int j = 1 ; j < money + 1 ; j ++) {

                dp[i][j] = dp[i - 1][j];

                if (q[i] == 0) {

                    if (j >= v[i]) {
                        dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - v[i]] + p[i]);

                    }
                    if (v1 != -1 && j >= v1) {
                        dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - v1] + p1);

                    }

                    if (v2 != -1 && j >= v2) {
                        dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - v2] + p2);

                    }

                    if (v3 != -1 && j >= v3) {
                        dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - v3] + p3);

                    }
 
                }

            }




        }
   


        System.out.println(dp[count][money] * dw);




    }
}

全部评论

相关推荐

不愿吃饼的变色龙很感性:89k,那你得年薪1000w多
点赞 评论 收藏
分享
大摆哥:刚好要做个聊天软件,直接让你帮他干活了
点赞 评论 收藏
分享
吾族血脉,自吾始立铁律:凡我子孙,胆敢研习计算机之术者,当受七窍流血之刑!若见Python之书,必遭雷殛;若触Java代码,定为不孝!键盘鼠标准入族谱秽物录,显示器乃摄魂邪镜祖祠前当立戒碑:"二进制者,断子绝孙之道也!"算法者,乱我族心智之毒也!数据结构,毁我门风之刃也!倘有逆子偷装&nbsp;vscode,即按祖规捆于祠堂梁柱,令其DEBUG至死不得解脱!今颁天条三则:壹)三代血亲不得报考计算机系违者削去辈分,永世称码奴贰)族中幼童须背《戒算经》"if-else咒,switch符,皆是断头术"叁)凡见子侄讨论编程者须即刻砸其电脑,焚其书籍泼黑狗血于键盘之上!太祖母口谕:"吾宁要文盲孙,不要程序员!"尔...
好吃的薯饼:姐妹这不是我们计算机系吧,我们计算机系的都在言情小说里当黑客大佬,各种竞赛拿奖拿到手软,公司系统道路监控随便入侵。身体线条非常优美,挺拔的站姿十分端正,给人以强壮有内涵的感觉。脸庞轮廓深刻,五官分明透露着对太阳底下最光辉的职业的向往和坚定,尤其是那双深邃的眼睛,写满了对代码和计算机系统的热情和无限的活力。我们计算机系是天之骄子、明日之星,人手一个博士学位不然高中电脑老师都当不上。组会的时候,面对导师和同事的疑难问题,也能够回答自如。我们总是把高高的发际线当做荣耀的象征。妈咪这不素我们计算机系吧,集美集帅怎么只会写hello world?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务