链接:https://ac.nowcoder.com/acm/problem/14553
来源:牛客网

题目描述

小明很喜欢打游戏,现在已知一个新英雄即将推出,他同样拥有四个技能,其中三个小技能的释放时间和固定的伤害值为:

1.乌鸦坐飞机 释放时间:x 固定伤害值:a

2.蜘蛛吃耳屎 释放时间:y 固定伤害值:b

3.饿狼前进 释放时间:z 固定伤害值:c

他还有一个大招,其释放的时间是一个区间【L,R】,可以在区间内任意时间点释放出技能,其如果在L+i时刻释放技能,其能够打出的伤害值为:temp+A*i

这里temp值表示技能的基础伤害(同时也就是在时刻L释放技能的伤害值),A是一个常数。

小明很喜欢研究连招使得在有限的时间内打出最高的伤害,现在他想要在T长度单位时间内打出最高的伤害,问这个最大伤害值。

输入描述

本题包含多组数据。
输入格式为:
T
x a
y b
z c
L R temp A
数据范围:
1<=T<=1e5
1<=x,y,z,L,R<=T
L<=R
<=a,b,c,temp,A<=1e5

输出描述

输出包含一行,输出能够打出的最高伤害值。

输入

8
3 1
2 3
1 3
3 3 3 3

输出

24

备注:

大招:蓄力时间最短L秒,最多R秒。无限次释放,释放之后照成的伤害是随着时间增加的
蓄力L秒释放能够造成Temp的伤害
蓄力L+1秒释放能够造成Temp+1*A的伤害
依次类推

题意

给你三种小技能,分别有释放时间和伤害。还有一个大招:蓄力时间为[L,R]的区间内范围,伤害为如果在L+i时刻释放技能,其能够打出的伤害值为:temp+A*i。问最大总伤害值。

理解

完全背包问题,大招需要分析一下。
如果将不同蓄力时间的大招当作小技能放入完全背包的循环中,会超时,原因是大招蓄力的时间范围为1e5,而时间按最多也是1e5,完全背包的时间复杂度为O(VN),会超时。那么:
将未蓄力的大招和蓄满力的大招作为两个小技能与其他三个小技能进行完全背包,这里是因为:如果大招蓄力的话收益会增高,那么就蓄满力,如果蓄力的收益不如不蓄力,那么就一点不蓄力。
最后再用蓄力一部分的大招来补充最后不足以释放小技能的时间,因此要在最后再用蓄力一部分的大招更新一下最优值。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;ll dp[100010];int main(){int T;ll w[5],v[5];int L,R;ll temp,A;while(scanf("%d",&T)!=EOF){memset(dp,0,sizeof(dp));for(int i = 0;i<3;i++){scanf("%lld%lld",&w[i],&v[i]);}scanf("%d%d%lld%lld",&L,&R,&temp,&A);w[3] = L;v[3] = temp;w[4] = R;v[4] = temp+(R-L)*A; for(int i = 0;i<5;i++){for(int j = w[i];j<=T;j++){dp[j] = max(dp[j],dp[j-w[i]]+v[i]);}}for(int i = L;i<=R;i++){dp[T] = max(dp[T],dp[T-i]+temp+(i-L)*A);}printf("%lld\n",dp[T]);}return 0;
}

小明打联盟 牛客(背包dp,多重背包)相关推荐

  1. 小明的字符串--牛客

    小明同学需要对一个长度为 N 的字符串进行处理,他需要按照要求执行若干步骤,每个步骤都均为下面 2 种操作中的一种,2 种操作如下: TYPE 1. 从字符串结尾开始算起,将第 X 个字符之前的字符移 ...

  2. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包

    动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...

  3. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  4. 01背包输出路径、完全背包、多重背包

    背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...

  5. 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏

    P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...

  6. hdu 3732(01背包转多重背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 思路:这么大的数据,用01背包肯定会TLE的,01背包转多重背包..最多也就11*11=121件 ...

  7. 二维费用 hdu 2159 FATE(完全背包)HDU OJ 4501 小明系列故事——买年货【DP】

    二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物品可以得到最大的价值.设这两种代价分别为代价1 ...

  8. codeforces(牛客网dp专题,排序)

    链接:https://ac.nowcoder.com/acm/problem/21314 来源:牛客网 牛牛正在打一场CF 比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码 第i道题的分 ...

  9. 小a的计算器(牛客签到题A)-简单模拟

    链接:https://ac.nowcoder.com/acm/contest/317/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

最新文章

  1. 脚本自动配置ssh互信
  2. Python 技术篇-不使用os模块遍历文件夹,pathlib库获取直接下级文件和所有下级文件
  3. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。
  4. 使用wireshark抓包,本地环回测试通信数据已经通过SM4国密算法加密
  5. Qt总结之三:磁盘文件操作、遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(三)
  6. Rust 中 Trait 的使用及实现分析
  7. opencv学习笔记三十二:Haar特征与积分图像
  8. h5页面制作软件html包,iH5专业H5页面制作工具网页版
  9. 情人节用python来表白女神
  10. JS实战应用之做LOL领图标任务~
  11. 举着一片片小小柔柔的叶子
  12. 傅里叶变换的理解-从正弦信号到傅里叶
  13. idea的去除转义的复制粘贴
  14. keepalive+nginx搭建主从负载服务器
  15. 硬件电路设计-FPGA(EP4CE6)最小系统
  16. 三星SDS推出企业人工智能聊天机器人Brity
  17. 研究生阶段如何学习、做研究
  18. 关于《第一本Docker书》5.2.1 sinatra
  19. 彻底关掉笔记本触摸屏
  20. 2019.12.05【ABAP随笔】 分组循环(LOOP AT Group) / REDUCE

热门文章

  1. 获取mysql数据库表名、表头信息
  2. python奇异值分解_python机器学习(七) 奇异值分解-SVD
  3. 定制比例阀控制放大器
  4. nacos配置中心的配置
  5. java的synthetic_Java中的synthetic
  6. Java使用Itext5.5.10进行pdf签章
  7. (鸟哥教材)Linux学习日记(二:Linux背景概念)
  8. 移位运算符解子集问题--用移位运算符转十进制为二进制
  9. html转word并保持格式不变,如何将Excel完整导入Word不变形?教你两种方法,保持格式不变...
  10. 【玩转Rabbitmq系列】01:一文带你敲响Rabbitmq的大门