[ZROJ110][假如战争今天爆发]
思路
先假设我们已经知道了操作顺序,考虑如何求出时间。用f[i][j]表示前i个物品,第i个加工完了第j台机器所需要的最少的时间。转移的时候就是f[i][j] = max(f[i-1][j],f[i][j - 1] + a[i][j]) a[i][j]表示第i个物品加工第j台机器所需要的时间。
然后去观察这个dp的转移矩阵

发现其实f[i][j]表示的是从(1,1)这个点走到(j,i)的最长路径。
然后我们再去考虑操作顺序。显然我们想让从(1,1)到(3,n)最长的路径最短。
然后考虑贪心。用到一种和国王游戏类似的贪心方法。我们先只考虑两个点之间应该怎样比较,然后就可以考虑全局。可以证明,因为B比C小,所以要想跑最长的路径,那么只在B这一行停留一下是最优秀的,然后就是考虑从那个位置从A行走到C行就可以了。

如图,我们考虑如果x在前面和y在前面会有什么不同,从那些重发的点如果x在前面,那么这条路径中间这一块的长度就会是A[x]+C[y] + max(B[x]+C[x],A[y] + B[y])。同理,如果y在前面那么这一块的路径长度就会是A[y] + C[x] +max(B[y] +C[y],A[x] + B[y])。然后根据这个进行比较,按照总和比较小的方案排序排序就好了。
拍完序之后可以发现其实不用dp也可以,先预处理出A行的前缀和和C行的后缀和。然后O(n)的枚举转移的改变方向的位置就可以了。
代码
#include<cstdio>
#include<algorithm>
#include<iostream>
#define fi(s) freopen(s,"r",stdin);
#define fo(s) freopen(s,"w",stdout);
using namespace std;
typedef long long ll;
const int N = 100000 + 100;
ll read() {
ll x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
struct node{
int a[4];
}e[N];
bool operator < (const node &y,const node &x) {
return y.a[1] + x.a[3] + max(y.a[2] + y.a[3],x.a[1] + x.a[2]) <
y.a[3] + x.a[1] + max(x.a[2] + x.a[3],y.a[1] + y.a[2]);
}
ll sum1[N],sum2[N];
int main() {
int n = read();
for(int i = 1;i <= n;++i)
e[i].a[1] = read(),e[i].a[2] = read(),e[i].a[3] = read();
sort(e + 1,e + n + 1);
for(int i = 1;i <= n;++i)
sum1[i] = sum1[i - 1] + e[i].a[1];
for(int i = n;i >= 1;--i)
sum2[i] = sum2[i + 1] + e[i].a[3];
ll ans = 0;
for(int i = 1;i <= n;++i)
ans = max(ans, sum1[i] + sum2[i] + e[i].a[2]);
cout<<ans;
return 0;
}
一言
真正重要的东西,总是没有的人比拥有的人清楚。 ——银魂
[ZROJ110][假如战争今天爆发]的更多相关文章
- 我眼中的PM
我眼中的PM 1 我眼中的PM 1.1 人云“一个管理,半个专家”,我说“一个管理,两个专家” 如今,我发现我们不得不面对这样一个现实——角色兼职.我习惯上把项目分为三类:性命攸关的项目(涉及到人身安 ...
- 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准
一.H264 概述 H.264,通常也被称之为H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 1. H.264视频编解码的意义 H.264的出现就是为了创 ...
- 10.30 正睿停课训练 Day12
目录 2018.10.30 正睿停课训练 Day12 A 强军战歌(DP 树状数组 容斥) B 当那一天来临(思路) C 假如战争今天爆发(贪心) 考试代码 B C 2018.10.30 正睿停课训练 ...
- BCH/BCHABC/BCHSV分叉后重放机制小结
1. 不过,在谈重放保护之前,我们需要先了解一下重放攻击(又称重播攻击.回放攻击).实际上,重放攻击在互联网行业里就有过出现,也是计算机世界黑客最常用的攻击方式之一,它是指攻击者发送一个目的主机已接收 ...
- 解析图书 XML
Java代码: package com.thinkgem.jeesite.test; import org.dom4j.Attribute; import org.dom4j.Document; im ...
- 关于PM的认识
1 我眼中的PM 1.1 人云“一个管理,半个专家”,我说“一个管理,两个专家” 如今,我发现我们不得不面对这样一个现实——角色兼职.我习惯上把项目分为三类:性命攸关的项目(涉及到人身安全的项目,如铁 ...
- 收藏单词TOEFL备份托福英语
TOEFL托福词汇串讲(文本) alchemy(chem-化学)n. 炼金术 chemistry 化学 alder 赤杨树 联想:older 老人坐在赤杨树下 sloth 树懒 algae n.海藻 ...
- 艾瑞克·弗洛姆 ( Erich Fromm )
艾瑞克·弗洛姆 ( Erich Fromm ) 来源 https://www.zhihu.com/question/22891103 ------------------------------ 作者 ...
- Andre Weil的一生
在20世纪的数学家中,Andre Weil(1906-1998)以其渊博的学识.坎坷的经历和超凡的人格魅力成为引人注目的一员. 他无疑是20世纪最伟大的数学家之一.国际数学家大会把数学划分为19个大的 ...
随机推荐
- JavaScript charAt() 方法
<script> var str="abcdef"; alert(str[0]); //a,高版本浏览器兼容 alert(str.charAt(0)); //a,兼容所 ...
- Spring-Boot Banner
下载Spring-Boot源码,目录结构spring-boot-2.1.0.M2\spring-boot-2.1.0.M2\spring-boot-project\spring-boot\src\ma ...
- Window上安装—Docker 笔记
本文转自:http://cnodejs.org/topic/55a24267419f1e8a23a64367 需求 想玩nodeClub 源码跑起来,结果window 上各种报错,各种依赖软件要装的感 ...
- mktemp -t -d用法
mktemp命令用于建立暂存文件或者文件夹,帮助文档如下: Usage: mktemp [OPTION]... [TEMPLATE] Create a temporary file or direct ...
- UDP反射DDoS攻击原理和防范
东南大学:UDP反射DDoS攻击原理和防范 2015-04-17 中国教育网络 李刚 丁伟 反射攻击的防范措施 上述协议安装后由于有关服务默认处于开启状态,是其被利用的一个重要因素.因此,防范可以从配 ...
- nginx 负载均衡(默认算法)
使用 nginx 的upstream模块只需要几步就可以实现一个负载均衡: 在 nginx 配置文件中添加两个server server { listen ; server_name 192.168. ...
- How to mount EFI on macOS
mount -t msdos /dev/disk0s1 /volumes/efi
- C# 动态调用泛型方法
static void Main(string[] args) { #region 具体类型可传递. Personal specifiedPersonal = new Personal(); Empl ...
- 洛谷P3183食物链题解
不得不说,这是道很难减少时间复杂度的题,且这个题有点像一道拓扑排序题,但是这个难度标签有点低. 我们应该可以想到拓扑排序可能是这个题的正解,但是题目中有输出总数,因此我们就可以造一个数组表示从这个点出 ...
- Vijos P1459 车展 (treap 任意区间中位数)
题面: 描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的高度h[i] ...