2019牛客暑期多校训练营(第六场)J Upgrading Technology
题意:
就是给你n个技能,每个技能最高升到m级,每升一级就是耗费Cij钱,这个Cij可能是负的,如果所有技能都升到或者说超过j等级,就会获得Dj钱,这个Dj也有可能是负值,让你求你最多得到多少钱(技能没有固定说要升到多少级,你也可以不升,这样就获得了0)
题解:
把所以获取的钱都变成正值,耗费的钱转化成负值,只需要处理一下Cij即可
之后计算最大后缀sum[i][j]代表第i个技能,从j+1---m级最大能获得多少钱
1 for(int i=1;i<=n;++i)
2 {
3 sum[i][m]=0;
4 for(int j=m-1;j>=0;j--)
5 {
6 sum[i][j]=max(0ll,sum[i][j+1]+a[i][j+1]);
7 }
8 }
之后再算一下假设所有技能都是j级是能获得的钱,然后再找n个技能的最大后缀,所有加到一起,还要再后缀里面找到最小的那个,要减去它
因为如果所以后缀都是正值,那么相当于所有技能都升了一级,如果这个时候Dj是负值,而且这个负值还不小,那我们求出来的就不是最小值了
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 using namespace std;
6 typedef long long ll;
7 const int maxn=1005;
8 const int mod = 998244353;
9 ll sum[maxn][maxn];
10 int d[maxn],a[maxn][maxn];
11 int main()
12 {
13 int cnt=1,t,n,m;
14 scanf("%d",&t);
15 while(t--)
16 {
17 scanf("%d %d",&n,&m);
18 for(int i=1;i<=n;++i)
19 for(int j=1;j<=m;++j)
20 scanf("%d",&a[i][j]),a[i][j]=-a[i][j];
21 for(int i=1;i<=m;++i)
22 scanf("%d",&d[i]); //有可能为负值
23 for(int i=1;i<=n;++i)
24 {
25 sum[i][m]=0;
26 for(int j=m-1;j>=0;j--)
27 {
28 sum[i][j]=max(0ll,sum[i][j+1]+a[i][j+1]);
29 }
30 }
31 ll now=0,ans=0;
32 for(int j=0;j<=m;++j)
33 {
34 for(int i=1;i<=n;++i)
35 now+=a[i][j];
36 now+=d[j];
37 ll temp=0,minn=1e18;
38 for(int i=1;i<=n;++i)
39 temp+=sum[i][j],minn=min(minn,sum[i][j]);
40 ans=max(ans,temp-minn+now);
41 }
42 printf("Case #%d: %lld\n",cnt++,ans);
43 }
44 return 0;
45 }
2019牛客暑期多校训练营(第六场)J Upgrading Technology的更多相关文章
- 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文自动机)
https://ac.nowcoder.com/acm/contest/886/C 题意: 给出一个串A , 集合S里面为A串的回文字串 , 现在在集合S里面找出多少对(a,b),b为a的字串 分析: ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
随机推荐
- 深入理解MySQL索引(上)
简单来说,索引的出现就是为了提高数据查询的效率,就像字典的目录一样.如果你想快速找一个不认识的字,在不借助目录的情况下,那我估计你的找好长时间.索引其实就相当于目录. 几种常见的索引模型 索引的出现是 ...
- ASP.NET Core - JWT认证实现
一.JWT结构 JWT介绍就太多了,这里主要关注下Jwt的结构. Jwt中包含三个部分:Header(头部).Payload(负载).Signature(签名) Header:描述 JWT 的元数据的 ...
- 【Python】简单的脚本,轻松批量修改文件名称
使用python脚本,批量修改文件夹名称 先创建一些没用的案例文件 import os #创建新文件夹 dir = os.makedirs('D:\\SomeThing\\testfile') #将文 ...
- Java中的基本数据类型与引用数据类型
一.基本数据类型 byte.short.int.long(整数类型) float.double(浮点数类型) char(字符型) boolean(布尔类型 ) Java数据大多数存放在堆栈中. 栈区: ...
- java之 Request
0x01.Request 什么是request 在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息. ...
- python3多进程 进程池 协程并发
一.进程 我们电脑的应用程序,都是进程,进程是资源分配的单位.进程切换需要的资源最大,效率低. 进程之间相互独立 cpu密集的时候适合用多进程 #多 ...
- Redis 实战 —— 08. 实现自动补全、分布式锁和计数信号量
自动补全 P109 自动补全在日常业务中随处可见,应该算一种最常见最通用的功能.实际业务场景肯定要包括包含子串的情况,其实这在一定程度上转换成了搜索功能,即包含某个子串的串,且优先展示前缀匹配的串.如 ...
- VMware vSphere (EXSI) 安装使用
VMware vSphere 镜像下载 VMware vSphere Hypervisor (ESXi) 6.7 https://my.vmware.com/cn/web/vmware/downloa ...
- (002)每日SQL学习:删除名称重复的数据
create table A ( id VARCHAR2(36), name VARCHAR2(100), sl VARCHAR2(36) ); insert all into a (id,name) ...
- DDD领域驱动设计:仓储
1 前置阅读 在阅读本文章之前,你可以先阅读: 什么是DDD DDD的实体.值对象.聚合根的基类和接口:设计与实现 2 什么是仓储? 仓储封装了基础设施来提供查询和持久化聚合操作. 它们集中提供常见的 ...