【描述】

海上有一个岛,在环海边上建有一条环岛高速公路,沿着公路有n(5 < n < 10000)个居民点,假设每个居民点有一个编号,从0开始,按顺时针依次从小到大(即,0,1,…,n-1)编号。在岛上啤酒很受青睐。某啤酒企业计划在岛上投资建一个啤酒厂,并根据啤酒需求每天向居住点送啤酒。已知两个相邻的居民点的距离以及每个居住点每天的啤酒需求量(假设每个居住点每天不超过2000桶)。假定每单位长度的路程送一桶啤酒需要的费用恒定(为单位费用)。请问,选择哪一个居民点建啤酒厂,才能使每天送啤酒的费用最小(空车不计费用)。

【输入】

输入第一行:为居民点数目n

后面为n行,每行为一个居民点的啤酒需求量以及按顺时针离下一个居民点的距离(均为整数,空格间隔),从编号为0的开始,按单增顺次给出。

注意:后面第n行对应于居民点(n-1)的啤酒需求量以及到编号为0的居民点距离。输出啤酒厂所在的居民点编号以及每天的运输费用,其间以逗号间隔

【输出】

输出啤酒厂所在的居民点编号以及每天的运输费用,其间以逗号间隔

输入:

输出:
,

输入输出样例

【分析:】

暴力枚举n个点中的每一个点作为起点,计算每个点为起点时的最小花费,打擂找最小值即可

时间复杂度O(n2)

n最大是10000,按计算机每秒能进行一亿次操作(现在的计算机速度远远大于这个值)来算,刚刚好能够卡过

关于如何求出送啤酒的费用,可以利用前缀和来简化算法

求出第i个点到第一个点的距离f(i)(前缀和,1 <= i <= n)

点l、点r的距离就是f(r) - f(l - 1)

len[j]存的是j到j+1的长度,所以乘以第j个居民点需要的啤酒数量时,要从(j-1)点开始算

由于是环岛公路,从点i到点j的走法有两种:

  1. abs(len[j] - len[i - 1])
  2. sum - abs(len[j] - len[i - 1]) (sum为环状公路的总长度)

要从两种走法中选取最小的走法.

【代码:】

 #include<iostream>
#include<cstdio>
using namespace std; const int MAXN = + ;
int n, sum, pos, minn = 0x7fffffff;
int a[MAXN], len[MAXN]; inline int abs(int x) {
return x < ? -x : x;
} int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d%d", &a[i], &len[i]);
sum += len[i];
len[i] += len[i - ];
}
for(int i = ; i <= n; i++) {
int tmp = ;
for(int j = ; j <= n; j++)
//len[j]存的是j到j+1的长度
//所以要从j-1开始算
//i、j大小关系不定,所以要加绝对值
tmp+=min(abs(len[j-]-len[i-]),sum-abs(len[j-]-len[i-]))*a[j];
if(minn > tmp) {
minn = tmp;
pos = i - ;
}
}
printf("%d,%d", pos, minn);
}

from:

http://noi.openjudge.cn/ch0113/19/

【openjudge】【前缀和】P6731啤酒厂选址的更多相关文章

  1. 无线网络发射选址 2014年NOIP全国联赛提高组(二维前缀和)

    P2038 无线网络发射器选址 题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南 ...

  2. luogu2038 [NOIp2014]无线网络发射器选址 (前缀和)

    貌似不用做前缀和也能过? #include<bits/stdc++.h> #define pa pair<int,int> #define CLR(a,x) memset(a, ...

  3. [openjudge] 2797最短前缀 Trie

    描述 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的字串是: "c", "ca", "car&q ...

  4. Codevs 1507 酒厂选址

    1507 酒厂选址 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description Abstinence(戒酒)岛的居民们酷爱一种无酒精啤酒 ...

  5. codevs——1507 酒厂选址

    1507 酒厂选址  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description Abstinence(戒酒) ...

  6. [BZOJ2684][CEOI2004]锯木厂选址

    BZOJ权限题! Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运 ...

  7. P4360 [CEOI2004]锯木厂选址

    P4360 [CEOI2004]锯木厂选址 这™连dp都不是 \(f_i\)表示第二个锯木厂设在\(i\)的最小代价 枚举1号锯木厂 \(f_i=min_{0<=j<i}(\sum_{i= ...

  8. luoguP4360 [CEOI2004]锯木厂选址

    题目链接 luoguP4360 [CEOI2004]锯木厂选址 题解 dis:后缀和 sum:前缀和 补集转化,减去少走的,得到转移方程 dp[i] = min(tot - sumj * disj - ...

  9. 酒厂选址(codevs 1507)

    题目描述 Description Abstinence(戒酒)岛的居民们酷爱一种无酒精啤酒.以前这种啤酒都是从波兰进口,但今年居民们想建一个自己的啤酒厂.岛上所有的城市都坐落在海边,并且由一条沿海岸线 ...

随机推荐

  1. 【模板】Bellman—Fort 单源最短路径算法

    2333 适用于边集储存 #include<bits/stdc++.h> using namespace std; const int inf=0x3fffffff; ],t[],d[], ...

  2. [日常] MySQL的哈希索引和原理研究测试

    1.哈希索引 :(hash index)基于哈希表实现,只有精确匹配到索引列的查询,才会起到效果.对于每一行数据,存储引擎都会对所有的索引列计算出一个哈希码(hash code),哈希码是一个较小的整 ...

  3. Java中获取32位UUID

    public class createUUID { public static void main(String[] args) { String uuid = UUID.randomUUID().t ...

  4. 插入sql返回主键id

    <insert id="insertSelective" parameterType="com.xxx.model.XDetail" useGenerat ...

  5. Spark of work

    Today I attended a meeting of reviewing code,  and I learned a lot from it. In the discuss, we found ...

  6. linux 上传下载 以及SCP命令

    1. scp 用法 scp就是用来在服务器和本地之间传文件的linux命令还有其他的方法,比如装ftp服务器 copy 本地的档案到远程的机器上 scp /Desktop/test.conf 用户名@ ...

  7. python__new__与__init__的区别

    __new__ __init__区别 1 class A(object): 2 def __init__(self,*args, **kwargs): 3 print "init A&quo ...

  8. 慕课网 Ajax笔记

    Ajax技术实现: 运用HTML和CSS来实现页面,表达信息: 运用XMLHttpRequest和web服务器进行数据的异步交换: 运用JavaScript操作DOM,实现动态局部刷新: 同步:就是用 ...

  9. ubuntu下创建虚拟python3开发环境

    友情链接:ubuntu16.04下安装python3+创建虚拟python3开发环境 1.为什么要创建python3虚拟开发环境? /********************************* ...

  10. python中的字符串编码问题——3.各操作系统下的不同编码方式

    各操作系统下的不同编码方式  先看一下 linux,python2.7 >>> B = b'\xc3\x84\xc3\xa8' >>> B.decode('utf- ...