2022-05-31:某公司游戏平台的夏季特惠开始了,你决定入手一些游戏。现在你一共有X元的预算。
该平台上所有的 n 个游戏均有折扣,标号为 i 的游戏的原价a_i元,现价只要b_i元,
也就是说该游戏可以优惠 a_i - b_i,并且你购买该游戏能获得快乐值为 w_i,
由于优惠的存在,你可能做出一些冲动消费导致最终买游戏的总费用超过预算,
只要满足 : 获得的总优惠金额不低于超过预算的总金额,
那在心理上就不会觉得吃亏。
现在你希望在心理上不觉得吃亏的前提下,获得尽可能多的快乐值。
来自字节内部训练营。
来自力扣bytedance-006. 夏季特惠。

答案2022-05-31:

转化之后是背包问题。

代码用rust编写。代码如下:

fn main() {
let sc: Vec<isize> = vec![4, 100, 100, 73, 60, 100, 89, 35, 30, 21, 30, 10, 8, 10];
let mut ii: isize = 0;
while ii < sc.len() as isize {
let n = sc[ii as usize];
ii += 1;
let mut money = sc[ii as usize];
ii += 1;
let mut costs: Vec<isize> = vec![];
for _i in 0..n {
costs.push(0);
}
let mut values: Vec<isize> = vec![];
for _i in 0..n {
values.push(0);
}
let mut size: isize = 0;
let mut ans: isize = 0;
for _i in 0..n {
// 打折前
let pre = sc[ii as usize];
ii += 1;
// 打折后
let pos = sc[ii as usize];
ii += 1;
// 满足度
let happy = sc[ii as usize];
ii += 1;
// 节省的钱(save) = 打折前(pre) - 打折后(pos)
let save = pre - pos;
// 带来的好处(well) = 节省的钱 - 打折后(pos)
let well = save - pos;
// 比如,一件"一定要买的商品":
// 预算 = 100,商品原价 = 10,打折后 = 3
// 那么好处 = (10 - 3) - 3 = 4
// 所以,这件商品把预算增加到了104,一定要买
// 接下来,比如一件"需要考虑的商品",预算 = 104,商品原价 = 10,打折后 = 8
// 那么好处 = (10 - 8) - 8 = -6
// 这件商品,就花掉6元!
// 也就是说,以后花的不是打折后的值,是"坏处"
let cost = -well;
if well >= 0 {
money += well;
ans += happy;
} else {
costs[size as usize] = cost;
values[size as usize] = happy;
size += 1;
}
}
let mut dp: Vec<Vec<isize>> = vec![];
for i in 0..size + 1 {
dp.push(vec![]);
for _j in 0..money + 1 {
dp[i as usize].push(0);
}
}
for a in 0..=size {
for b in 0..=money {
dp[a as usize][b as usize] = -2;
}
}
ans += process(&mut costs, &mut values, size, 0, money, &mut dp);
println!("{}", ans);
}
} fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
if a > b {
a
} else {
b
}
} fn process(
costs: &mut Vec<isize>,
values: &mut Vec<isize>,
size: isize,
i: isize,
money: isize,
dp: &mut Vec<Vec<isize>>,
) -> isize {
if money < 0 {
return -1;
}
if i == size {
return 0;
}
if dp[i as usize][money as usize] != -2 {
return dp[i as usize][money as usize];
}
let p1 = process(costs, values, size, i + 1, money, dp);
let mut p2 = -1;
let next = process(costs, values, size, i + 1, money - costs[i as usize], dp);
if next != -1 {
p2 = values[i as usize] + next;
}
let ans = get_max(p1, p2);
dp[i as usize][money as usize] = ans;
return ans;
}

执行结果如下:


左神java代码

bytedance-006. 夏季特惠

2022-05-31:某公司游戏平台的夏季特惠开始了,你决定入手一些游戏。现在你一共有X元的预算。 该平台上所有的 n 个游戏均有折扣,标号为 i 的游戏的原价a_i元,现价只要b_i元, 也就是说该的更多相关文章

  1. http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html深入理解Java:SimpleDateFormat安全的时间格式化

    http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html

  2. 梅安森元图地图开放平台、专业GIS地图平台

    元图地图开放平台:http://map.cmetamap.com/?from=groupmessage 梅安森元图地图开放平台: 自主知识产权,专业GIS地图平台,用简单语言即可轻松操作复杂的互联网地 ...

  3. Murano Weekly Meeting 2016.05.31

    Meeting time: 2016.May.31 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1.A ...

  4. leetcode(三)——2020.05.31

    (上周7道题完成) 本周leetcode题目(from leetcode hot100): 15 17 19 21 33 94 42 额外完成: 22(回溯), 8, 31,200

  5. Cheatsheet: 2016 05.01 ~ 05.31

    Other Awesome Go - A curated list of awesome Go frameworks, libraries and software Visual Studio Cod ...

  6. Cheatsheet: 2015 05.01 ~ 05.31

    .NET .NET on Mac for the OS X n00b without Mono via Visual Studio Code Microsoft frameworks deprecat ...

  7. Cheatsheet: 2014 05.01 ~ 05.31

    Web Choosing a Web Framework/Language Combo for the Next Decade Optimizing NGINX and PHP-fpm for hig ...

  8. Contest2089 - 湖南多校对抗赛(2015.05.31) Swipe(csu1648)

    Problem E: Swipe Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 100  Solved: 15[Submit][Status][Web ...

  9. Android学习CursorWrapper与Decorator模式 (转至http://www.cnblogs.com/bastard/archive/2012/05/31/2527944.html)

    一 Decorator模式 意图: 动态的给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 动态的给一个对象,而不是对整个类添加额外职责,说明此模式将采用的结 ...

  10. Cheatsheet: 2017 05.01 ~05.31

    Web Configuring Your .npmrc for an Optimal Node.js Environment Web Developer Security Checklist HTTP ...

随机推荐

  1. element plus按钮点击后不会自动失去焦点的解决方案及Vue3中如何挂载全局函数并在组件中使用

    一.element plus按钮点击后不会自动失去焦点,该如何解决? 在按钮点击点击回调中增加以下代码: event.target.blur() if (event.target.nodeName = ...

  2. redis学习(一)常用命令

    clear 清屏 info 获取当前redis的版本等信息 keys pattern 查找所有符合给定模式( pattern)的 key keys * 查找所有的key type key 查看某个ke ...

  3. mysql生成随机日期

    生成一天内随机时间 select sec_to_time(rand() * 86400); 生成一天内随机时间,floor取整秒 select sec_to_time(floor(rand() * 8 ...

  4. pugixml XML格式处理库的介绍和使用(面向业务编程-格式处理)

    pugixml XML格式处理库的介绍和使用(面向业务编程-格式处理) 介绍 pugixml是一个轻量级的C++ XML处理库.它的特点: 类似dom的界面,具有丰富的遍历/修改功能 非常快速的非验证 ...

  5. Android Studio报错--Build failed with an exception.

    错误描述 在代码写好之后,点击运行,会爆出这样的错误,查看日志,发现是Manifest.xml文件爆出来的错误 具体解决 我的错误没有别的版本那么麻烦,就是我建立了Empty Activity之后,我 ...

  6. 使用float进行比较问题处理

    float compare Abstract 使用float数据进行精确计算和比较,可能由于精度问题导致程序逻辑异常. Explanation 使用float数据进行比较,计算机表达double和fl ...

  7. 第六章 C控制语句:分支和跳转

    6.1if语句 程序 #define _CRT_SECURE_NO_WARNINGS 1 //coladays.c -- 求出温度低于零度的天数 #include<stdio.h> int ...

  8. JVM 重点知识归纳

    JVM(Java Virtual Machine:译为 Java虚拟机)内核: 通常指通过软件模拟的具有完整硬件系统功能的运行在一个完全隔离环境汇总的完整计算机系统.如下:  ■  Mware/Vis ...

  9. flutter feature---->quick action

    reference: https://www.filledstacks.com/snippet/managing-quick-actions-in-flutter/ code import 'dart ...

  10. $\mathcal{Friends\,\,Of\,--Mathic}$