题意:

有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. 解决mac下,javac命令出现的乱码问题

    今天突然检查我的jdk安装,发现出现了乱码 一,出现乱码

  2. dev 中 字符串转中文拼音缩写,对grid列表进行模糊匹配,grid获取焦点行,gridlookupedit控件用拼音模糊匹配下拉选项

    番外篇:. //该方法是将字符串转化为中文拼音的首写字母大写, public static string RemoveSpecialCharacters(string str){try{if (str ...

  3. 使用自己的Python函数处理Protobuf中的字符串编码

    我目前所在的项目是一个老项目,里面的字符串编码有点乱,数据库中有些是GB2312,有些是UTF8:代码中有些是GBK,有些是UTF8,代码中转来转去,经常是不太清楚当前这个字符串是什么编码,由于是老项 ...

  4. 笔记38 Spring Web Flow——订单流程(定义基本流程)

    做一个在线的披萨订购应用 实际上,订购披萨的过程可以很好地定义在一个流程中.我们首先从 构建一个高层次的流程开始,它定义了订购披萨的整体过程.接下 来,我们会将这个流程拆分成子流程,这些子流程在较低的 ...

  5. C++源文件的后缀名问题

    VC里用cpp作后缀名, 在GCC里默认采用C.cc.cxx作为后缀名 .cpp, .h (VS file).cc, .h (GCC file)   C中: 头文件后缀名: .h 源文件后缀名: .c ...

  6. 简单HOOK SSDT实现文件防删除

    http://www.rosoo.net/a/201001/8347.html

  7. 关于“回归自然”onepage的总结

    (1)消除li 前面的点 使用 ul {list-style:none; } 并且ul之外会有一个容器,nav等 利用margin值保持和其他元素的等高度. (2) <h1>回归自然< ...

  8. hexo next修改代码区主题,修改字体样式,大小

    文章目录 广告 修改代码区主题 站点_config.yml 主题_config.yml 修改字体样式,大小 ps 我自己的方式 广告 本人博客地址:https://mmmmmm.me 源码:https ...

  9. MongoDB点滴

    0 http://blog.csdn.net/mydeman/article/details/6652387 1 MongoDB 内置连接池,不需要使用额外的连接池驱动 Note: The Mongo ...

  10. SPI 通信

    Frm: http://www.wzaobao.com/p/l5079K.html http://blog.csdn.net/xqmoo8/article/details/8043474 http:/ ...