题意:

有n个技能,一开始都是0级,第i个技能从j-1级升到j级,花费$c_{i,j}$,但是花费不一定是正的

所有的技能升到j级时,奖励$d_j$但是奖励也不一定是正的

题解:

用sum[i][j]储存-c[i][j]的前缀和,即技能i升到j级后总共的收益

再用w[j]储存f[j]的前缀和,代表所有的技能都升到j的收益。

再开一个数组maxxx[i][j]用于储存技能i至少升到j级的收益,即max(sum[i][j~m])。

然后枚举j,计算$w_j+\sum_{i=1}^{n}maxxx[i][j]$即可

但这样带来一个问题,对于某个j,假如每种技能在最少升到j级的情况下,最优情况都是需要升到更高级,那么,所有的技能都升级带来的奖励d你就必须收下,即便这个d是负的。

因此,定义bonus=maxxx[i][j]-sum[i][j],代表某个技能因为升到高于j得到的额外奖励,当对于某个j,所有的技能带来的bonus都大于0,就减去那个最小的bonus,表示以最小的代价把一个技能打回j级,这样就保证了计算出来的奖励d是正确的。

#include<iostream>
#include<cstring>
#define LL long long
#define INF 0x3f3f3f3f3f3f3f3f
using namespace std;
LL sum[][];
LL maxxx[][];
LL d[]; int main(){
// int i;
// int j;
int t;
scanf("%d",&t);
// for(int i=0;i<=1000;i++){
// for(int j=0;j<=1000;j++){
// printf("%lld ",sum[i][j]);
// }
// printf("\n");
// }
for(int tt=;tt<=t;tt++){
int n,m;
scanf("%d %d",&n,&m);
// memset(sum,0,sizeof sum);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf("%lld",&sum[i][j]);
sum[i][j]=-sum[i][j];
sum[i][j]+=sum[i][j-];
}
// for(int j=0;j<=m;j++)printf("%lld ",sum[i][j]);
// printf("\n");
maxxx[i][m]=sum[i][m];
for(int j=m;j>=;j--){
maxxx[i][j-]=max(sum[i][j-],maxxx[i][j]);
//最少修炼到第j层时最大收益
}
// for(int j=0;j<=m;j++)printf("%lld ",maxxx[i][j]);
// printf("\n");
}
for(int i=;i<=m;i++){
scanf("%lld",&d[i]);
d[i]+=d[i-];
}
LL maxx=;
for(int j=;j<=m;j++){
//最少修炼到第j层
LL now=d[j];
int bonustimes=;
LL minbonus=INF;
for(int i=;i<=n;i++){
now+=maxxx[i][j];
if(maxxx[i][j]>sum[i][j]){
bonustimes++;
minbonus=min(minbonus,maxxx[i][j]-sum[i][j]);
}
}
// printf("bun:%lld\n",minbonus);
if(bonustimes==n)now-=minbonus;
maxx=max(maxx,now);
}
printf("Case #%d: %lld\n",tt,maxx);
}
return ;
}

PS:

本题带来了一个教训,格式输入一定不要偷懒,要对于所有的数据类型都采用正确的格式符号,即便题目限定了输入范围。

比如在做这道题时,我发现,如果你用%d输入long long,因为%d只给了变量的后32位赋值,但是注意,对于负数,因为补码运算,int 和long long不是简单的截掉头部的关系。

比如你输入-1,32位的-1是11111111111111111111111111111111

但是如果乱用格式符号,导致64位变量只有后32位被赋值,则变成了0000000000000000000000000000000011111111111111111111111111111111

这个数对应的是4294967295

浮点数乱七八糟的就更多了。

正确的格式符号:

scanf:%d->int %lld/%l64d->long long (视编译器而定)  %f->float %lf->double

printf:%f->float/double

如果忽略这点,就会导致莫名其妙的wa。

牛客多校第六场 J Upgrading Technology dp的更多相关文章

  1. 2019 牛客多校第六场 J Upgrading Technology

    题目链接:https://ac.nowcoder.com/acm/contest/886/J 题目大意 略. 分析 见代码. 代码如下 #include <bits/stdc++.h> u ...

  2. 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)

    链接:https://www.nowcoder.com/acm/contest/144/J来源:牛客网 skywalkert, the new legend of Beihang University ...

  3. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  4. 牛客多校第五场 J:Plan

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

  5. 牛客多校第六场-H-Pair

    链接:https://ac.nowcoder.com/acm/contest/887/H来源:牛客网 题目描述 Given three integers A, B, C. Count the numb ...

  6. 牛客多校第六场 C Generation I 组合数学 阶乘逆元模板

    链接:https://www.nowcoder.com/acm/contest/144/C来源:牛客网 Oak is given N empty and non-repeatable sets whi ...

  7. 牛客多校第10场J Wood Processing 分治优化/斜率优化 DP

    题意:你有n块木头,每块木头有一个高h和宽w,你可以把高度相同的木头合并成一块木头.你可以选择一些木头消去它们的一部分,浪费的部分是 消去部分的高度 * 木头的宽度,问把n块木头变成恰好m块木头至少要 ...

  8. 2019牛客多校第六场J-Upgrading Technology(枚举+单调队列)

    Upgrading Technology 题目传送门 解题思路 对于这题,我们可以枚举一个k从0~m,表示当前我们把所有技能最少升到了k级,且至少有一个为k级. 此时我们刚好获得了前k个d[]的收益, ...

  9. 牛客多校第七场H Pair 数位dp理解

    Pair 题意 给出A B C,问x取值[1,A]和y取值[1,B]存在多少组pair<x,y>满足以下最小一种条件,\(x \& y >c\),\(x\) xor \(y& ...

随机推荐

  1. Pregel的计算过程

  2. python指定概率随机取值 理解np.random.seed()

    python指定概率随机取值参考如下: 下面是利用 np.random.choice()指定概率取样的例子: np.random.seed(0) p = np.array([0.1, 0.0, 0.7 ...

  3. Echart中X轴为时间坐标刻度时,后台返回时间List被强制转化为时间戳问题

    if(recordlist!=null&&recordlist.size()>0) { for (Record record : recordlist) { //根据频次决定使用 ...

  4. ajax 工作原理

    Ajax的优缺点及工作原理? 定义和用法: AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).Ajax 是一种用于创建快速动态网 ...

  5. 关于h5打包后 wag包无法安装的问题

    如果不是逻辑错误,那么有可能是下列三种情况之一, 1 wgt打包时的appid与安装包不符 2 打包wgt文件和打包安装包文件 用的不是同一个HBuilder账户 3 安装包打包时权限配置,和wgt包 ...

  6. Zabbix-server及zabbix-web安装手册(centos7)

    注:本实验环境在centos7mini下实验,具体相关软件版本最好一致,避免依赖关系缺失. 当然也可以新建用户zabbix(不使用root,避免安全隐患),在zabbix下执行操作,加sudo提升权限 ...

  7. JavaWeb学习篇之----EL表达式详解

    我们之前的几篇文章中都提到了一个EL表达式,那么这个EL表达式到底是什么东东呢?为什么用处那么大,下面我们就来看看EL表达式的相关内容 EL表达式简介: EL 全名为Expression Langua ...

  8. 城里城外看SSDT

    引子 2006年,中国互联网上的斗争硝烟弥漫.这时的战场上,先前颇为流行的窗口挂钩.API挂钩.进程注入等技术已然成为昨日黄花,大有逐渐淡出之势:取而代之的,则是更狠毒.更为赤裸裸的词汇:驱动.隐藏进 ...

  9. 杂项-Class:Class

    ylbtech-杂项-Class:Class 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://y ...

  10. C++的new和delete

    #include <iostream> using namespace std; int main(int argc, char *argv[]) { int *p = NULL; //定 ...