UOJ244 【UER #7】短路
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。
本文作者:ljh2000
作者博客:http://www.cnblogs.com/ljh2000-jump/
转载请注明出处,侵权必究,保留最终解释权!
Description
“第七套广播体操,原地踏步——走!”
众所周知,跳蚤们最喜欢每天早起做早操,经常天还没亮就齐刷刷地站在操场做着反复纵跳热热身。跳晚国在研制三星 note7 的时候注意到了这点,于是他们打算让炸弹更快地引爆,这样就可以消灭更多早起的跳蚤。
三星 note7 的主板可以看作是由(2n+1)×(2n+1) 个中继器构成的,某些中继器会有导线连在一起,左上角和右下角的中继器分别连着电源的正负极。
电流流过一根导线的时间可忽略不计,但当电流经过中继器时,会延缓一段时间再从中继器流出。这个时间只跟该中继器本身有关,我们把这段时间的长度称为中继器的延时值。
这些中继器由导线连接围成一个一个的层,同个层的中继器的种类都一样,而不同层的种类都不一样,可以发现总共有n+1 层。当n=4 时,主板大概长这样:

跳晚们打算再加几根导线将某些中继器连接起来.凭借发达的重工业,他们能生产出无数条导线。但由于主板的限制,他们的导线只能和主板四周的边平行,且其长度只够连接相邻两个中继器。
现在他们想知道,他们改造的三星 note7 的电源正极流出的电流能在多短的时间到达电源负极从而造成短路,这样电池就会释放出巨大的能量摧毁跳蚤国的有生力量了。
请参考输入格式和样例配图来更好地理解题意。
输入格式
第一行一个正整数 nn。
第二行n+1 个正整数 a0,a1,…,an,表示从内到外每层的中继器的延时值,单位为秒。其中,第 i 行第 j 列的中继器的延时值为(1≤i,j≤n)amax(|i−n−1|,|j−n−1|)
输出格式
输出一行一个数表示改造后的最短引爆时间。
C/C++ 输入输出 long long 时请用 %lld。C++ 可以直接使用 cin/cout 输入输出。
样例一
input
1
1 2
output
9
explanation
这个数据对应的主板如下所示:

显然,我们可以用导线改造成这样:

这样从左上角到右下角就会有条 {2,2,1,2,2}{2,2,1,2,2} 的电流路径,耗时为 99 秒。
样例二
input
9
9 5 3 7 6 9 1 8 2 4
output
69
样例三
见样例数据下载。
限制与约定
| 测试点编号 | nn |
|---|---|
| 1 | n≤5n≤5 |
| 2 | n≤2000n≤2000 |
| 3 | |
| 4 | n≤5000n≤5000 |
| 5 | |
| 6 | n≤105n≤105 |
| 7 | |
| 8 | |
| 9 | |
| 10 |
对于所有数据,保证每个数都是不超过 109109 的正整数。
正解:贪心
解题报告:
开始的时候直接写了一发50分暴力,就没管了,把后面两道题暴力写完才回过头来看这道题。发现了一些奇怪的贪心,然后就写了。本来T2、T3暴力+骗分分数挺高的,最后A题FST了,仔细看了一下,没开long long...错失虐场机会。
考虑一个问题,从外往内数,我们已经到达了第x层,那么1->x-1层每一层都至少经过了一次,否则到不了x。由于图是对称的,我们只考虑一半,另一半直接翻折过去肯定也是最优的。
那么我们一定希望决策到x时,之前走过的是最优的情况。如何保证最优性呢?我们记录一下从外往内数前x层的最小的权值,我们肯定希望这一层尽可能地多走,而其他的少走。我们假设走了一层别的层的,我们可以把这个不够优的移动往上平移到最优的那一层走,也就是说我可以在最优的那一层多走一次来代替这一层。可以想到,这样的贪心可以保证到达这一层的花费是最小的。
由于到了x之后又会有新的决策,要么再往内走,要么直接从这一层走出去,也就是说不再往内走。后者可以直接通过公式算出来,发现每一层比内一层多4个,所以很快求出直接从这一层走出去的答案。至于前者,可以继续往下做,相当于是进入下一步决策。
//It is made by ljh2000
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int MAXN = ;
int n;
LL a[MAXN];
LL ans,now; inline int getint()
{
int w=,q=; char c=getchar();
while((c<'' || c>'') && c!='-') c=getchar(); if(c=='-') q=,c=getchar();
while (c>='' && c<='') w=w*+c-'', c=getchar(); return q ? -w : w;
} inline void work(){
n=getint(); for(int i=;i<=n;i++) a[i]=getint();
now=ans=(1LL<<); LL lin,tot=;
for(LL i=n;i>=;i--) {
lin=a[i]*(*i+)+tot;
if(lin<ans) ans=lin;
if(a[i]<now) now=a[i];
tot+=(now+a[i])*;
}
printf("%lld",ans);
} int main()
{
work();
return ;
}
UOJ244 【UER #7】短路的更多相关文章
- 【uoj#244】[UER #7]短路 CDQ分治+斜率优化dp
题目描述 给出 $(2n+1)\times (2n+1)$ 个点,点 $(i,j)$ 的权值为 $a[max(|i-n-1|,|j-n-1|)]$ ,找一条从 $(1,1)$ 走到 $(2n+1,2n ...
- 【UOJ244】[UER7]短路
[题目大意] (2n+1)*(2n+1)的矩形,由里到外每一层都有一个相同的值.问从左上走到右小经过的点累和的最小值. [思路] 一眼就是贪心.首先能够想到的是,权值最小的那些边要尽可能夺走,所以必定 ...
- 【UOJ244】【UER #7】短路
题解: 感觉贪心水平有所提高.. 首先比较显然的事情是我们可以枚举最深进行到哪一层 我们会发现,当且仅当该层是最小值才会使用决策, 并且是从该层的左上,走到右下 另外中间步骤就是(好难描述啊)一个单调 ...
- 【UOJ244】 【UER #7】短路(贪心)
传送门 uoj Solution 简单题? 考虑一条路径长什么样子,一定是经过某一个字母环的左上角,那么答案就很简单了. 我们记一个前缀最小值,这样子让他一路走下去一定是最优! 然后扫一遍就好了. 代 ...
- uoj#244. 【UER #7】短路
题目 orz myy 这个矩形对称的性质非常优美,所以我们只需要考虑一个\(\frac{1}{4}\)的矩阵,即一个倒三角形 现在我们要求的是从\((1,1)\)到三角形对边上每个点的最短路,不难发现 ...
- 【UOJ #244】【UER #7】短路
http://uoj.ac/contest/35/problem/244 对其他人来说好简单的一道题,我当时却不会做TWT 注定滚粗啊 题解很好的~ #include<cstdio> #i ...
- UOJ244 短路 贪心
正解:贪心 解题报告: 传送门! 贪心真的都是些神仙题,,,以我的脑子可能是不存在自己想出解这种事情了QAQ 然后直接港这道题解法趴,,, 首先因为这个是对称的,所以显然的是可以画一条斜右上的对角线, ...
- bzoj1001--最大流转最短路
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...
随机推荐
- MySQL Index详解
FROM:http://blog.csdn.net/tianmo2010/article/details/7930482 ①MySQL Index 一.SHOW INDEX会返回以下字段 1.Tabl ...
- linux可靠信号和非可靠信号测试样例
不可靠信号(在执行自定义函数其间会丢失同类信号) 可靠信号(在执行自定义函数其间不会丢失同类信号) 不可靠信号用一次以后,就恢复其默认处理吗? 至少在ubuntu 12.04上,已经是一次绑定,永远使 ...
- Centos6.4安装erlang并配置mysql数据库
在安装时,一定要使用Centos6.4光盘为yum源,否则可能使用了版本有问题的openssl 1.首先要先安装GCC GCC-C++ Openssl等依赖模块: yum -y install mak ...
- 闲扯 『 document.write 』
初春的晚上,闲来无事,聊聊 document.write 方法. document.write 使用方式非常简单,把 "字符串化"(不好意思,这可能是我自己创造的名词)的 html ...
- JavaScript Array
1.常用方法 // 数组构造 var a = new Array(20); // 长度为20的数组 var b = new Array('red', 'blue', 'white'); var c = ...
- JavaScript学习笔记-随滚轮匀速滑动的浮动广告窗动画
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- clean之后R文件消失
首先确定你的SDK是新的. 其次接下来检查你的.xml文件,文件名不能大写. 如果xml文件太多 ,那么clean一下你的项目,这时候注意看Console的提示. Console会提示你xml文件错误 ...
- HIbernate的脏数据检测和延缓加载
脏数据监测: 在一个事务中,加载的数据,除了返回给用户之外,会复制一份在session中,在事务提交时,会用session中的备份和用户的数据进行比对,如果用户的数据状态改变, 则用户的数据即为:脏数 ...
- JNI系列——C文件中的方法调用Java中方法
1.创建xxx.jni包并在该包下实现一些Java的方法,和要调用的本地方法 2.实现MainActivity中的按钮点击事件-即点击按钮调用本地的方法 3.在C文件中的方法中回调Java的方法 3. ...
- window配置nginx+php+mysql
博客来源: http://www.cnblogs.com/wuzhenbo/p/3493518.html 启用nginx D:\nginx>nginx.exe 重启 D:\nginx> ...