题解 | #购物单#

购物单

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

//https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4?tpId=37&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26pageSize%3D50%26search%3D50%26tpId%3D37%26type%3D37&difficulty=&judgeStatus=&tags=&title=%E8%B4%AD%E7%89%A9&gioEnter=menu

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int m = 0;
    int n = 0;

    while (cin >> m >> n) {
        m/=10;  //价钱/10看作背包容量

        vector<vector<int>> price(n+1, vector<int> (3, 0));
        vector<vector<int>> value(n+1, vector<int> (3, 0));
        vector<vector<int>> ans(n+1, vector<int> (m+1, 0));


        for(int i = 1;i<=n;i++){
            int v = 0;
            int p = 0;
            int q = 0;

            cin >> v >> p >> q;
            v/=10;

            if(q==0){
                price[i][0] = v;
                value[i][0] = p;

            }else if(price[q][1]!=0){
                    price[q][2] = v;
                    value[q][2] = p;
                }else{
                    price[q][1] = v;
                    value[q][1] = p;
                }

        }

        for(int i = 1;i<=n;i++)
            for(int j = 1;j<=m;j++){    //复制for循环时一定注意检查变量
                int a = price[i][0], b = value[i][0];
                int c = price[i][1], d = value[i][1];
                int e = price[i][2], f = value[i][2];
                ans[i][j] = j>=a? max(ans[i-1][j], ans[i-1][j-a]+a*b):ans[i-1][j];
                ans[i][j] = j>=a+c? max(ans[i][j], ans[i-1][j-a-c]+a*b+c*d):ans[i][j];  //要不要1附件
                ans[i][j] = j>=a+e? max(ans[i][j], ans[i-1][j-a-e]+a*b+e*f):ans[i][j];  //要不要2附件
                ans[i][j] = j>=a+c+e? max(ans[i][j], ans[i-1][j-a-c-e]+a*b+c*d+e*f):ans[i][j];  //要不要1附件+2附件,没项都是在前一项的基础上进行对比,所以不要的情况为ans[i][j]

            }

        cout << ans[n][m]*10 << endl;

    }
}

全部评论

相关推荐

能干的三文鱼刷了100道题:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
点赞 评论 收藏
分享
面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务