题目描述

某地区有m座煤矿,其中第i号矿每年产量为ai吨,现有火力发电厂一个,每年需用煤b吨,每年运行的固定费用(包括折旧费,不包括煤的运费)为h元,每吨原煤从第i号矿运到原有发电厂的运费为Ci0(i=1,2,…,m)。

现规划新建一个发电厂,m座煤矿每年开采的原煤将全部供给这两座发电厂。现有n个备选的厂址。若在第j号备选厂址建新厂,每年运行的固定费用为hj元。每吨原煤从第i号矿运到j号备选厂址的运费为Cij(i=1,2,…,m;j=1,2,…,n)。

试问:应把新厂厂址选取在何处?m座煤矿开采的原煤应如何分配给两个发电厂,才能使每年的总费用(发电厂运行费用与原煤运费之和)为最小。

输入输出格式

输入格式:

第1行: m b h n

第2行: a1 a2 … am (0<=ai<=500, a1+a2+...+an>=b)

第3行: h1 h2 … hn (0<=hi<=100)

第4行: C10 C20 … Cm0 (0<=Cij<=50)

第5行: C11 C21 … Cm1

… …

第n+4行:C1n C2n … Cmn

输出格式:

第1行:新厂址编号,如果有多个编号满足要求,输出最小的。

第2行:总费用

说明

对于所有数据, n<=50, m<=50000, b<=10000

题解

  我们看到这道题的数据,发现工厂的数量不会多余50个,所以我们可以考虑枚举新的工厂的选址。

  然后,问题就转化为了两个工厂如何分配资源使得总花费最小,我们可以利用贪心的思想来做:

  如果所有的资源都汇集到新建的厂(now),那么花费就为∑(a[i]*c[i][now]),然后我们要从所有的资源中提取出b的资源使得这个值最小,所以我们可以记录w[i] = c[i][now] - c[i][0]表示把i的资源移到原工厂每吨会多花多少钱。然后我们在以此排序贪心即可。

  这种贪心的思想是利用的一种差值,这个差值的实际含义为:在把所有的关键量都放在一个组中达到一个定值,然后在从中移取出一部分,而达到的新的量就是新的花费减去不用的花费在这种情况下我们就可以使用差值来贪心。

程序

 #include<bits/stdc++.h>
using namespace std; int b, m, n, h;
int c[][], cost[], a[];
struct Fact{
int pos, val;
}w[]; inline bool comp(const Fact & x, const Fact & y) {return x.val > y.val;} int main()
{
int sumcost = 0x7fffffff, num, tag, ans;
scanf("%d%d%d%d", &m, &b, &h, &n);
for(int i = ; i <= m; ++ i) scanf("%d", &a[i]);
for(int i = ; i <= n; ++ i) scanf("%d", &cost[i]);
for(int i = ; i <= m; ++ i) scanf("%d", &c[i][]);
for(int i = ; i <= n; ++ i)
for(int j = ; j <= m; ++ j)
scanf("%d", &c[j][i]);
for(int i = ; i <= n; ++ i)
{
tag = , ans = ;
for(int j = ; j <= m; ++ j)
{
w[j].val = c[j][i] - c[j][];
w[j].pos = j;
}
sort(w + , w + + m, comp);
int k = ;
for(;;)
{
++ k;
if(tag + a[w[k].pos] > b)
{
ans += c[w[k].pos][] * (b - tag);
ans += c[w[k].pos][i] * (a[w[k].pos] - (b - tag));
break;
}
tag += a[w[k].pos];
ans += c[w[k].pos][] * a[w[k].pos];
}
for(;k <= m;) ++ k, ans += c[w[k].pos][i] * a[w[k].pos];
ans += h + cost[i];
if(sumcost > ans)
{
sumcost = ans;
num = i;
}
}
printf("%d\n%d\n", num, sumcost);
return ;
}

【HAOI2010】工厂选址题解的更多相关文章

  1. 【BZOJ2426】[HAOI2010]工厂选址(贪心)

    [BZOJ2426][HAOI2010]工厂选址(贪心) 题面 BZOJ 洛谷 题解 首先看懂题目到底在做什么. 然而发现我们显然可以对于每个备选位置跑一遍费用流,然后并不够优秀. 不难发现所有的位置 ...

  2. BZOJ 2426: [HAOI2010]工厂选址

    2426: [HAOI2010]工厂选址 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 364  Solved: 248[Submit][Status ...

  3. 2426: [HAOI2010]工厂选址

    2426: [HAOI2010]工厂选址 链接 代码: /* 贪心: 奇妙!!!!! 因为所有的煤矿不是给新厂,就是给旧厂(而且旧厂的得到b) 为了使费用最小,感性的理解,那么一个煤矿给哪个厂,取决于 ...

  4. BZOJ2426 [HAOI2010]工厂选址

    Description 某地区有m座煤矿,其中第i号矿每年产量为ai吨,现有火力发电厂一个,每年需用煤b吨,每年运行的固定费用(包括折旧费,不包括煤的运费)为h元,每吨原煤从第i号矿运到原有发电厂的运 ...

  5. HAOI2010 工厂选址

    题目链接:戳我 数组开小火葬场qwqwq 就是一个贪心吧.对于一个数,我们知道只有两种摆放方式.所以我们可以先都放到新的里面,然后做一下新的-原先的差,按照差从大到小排序,依次提取数值减去即可. 代码 ...

  6. 洛谷P2514||bzoj2426 [HAOI2010]工厂选址

    洛谷P2514 bzoj2426 其实是个简单的贪心,然而不适合在脑子不清醒的时候做...看不懂题意续了1个小时 很容易发现应该枚举新建哪个发电厂,对于这种方案就是取其中b吨煤运到原来发电厂,取剩下( ...

  7. 【文文殿下】[CEOI2004]锯木厂选址 题解

    题解 我们枚举建厂的位置,发现有个\(n^2\)的DP.随手搞个斜率优化到\(O(n)\). #include<bits/stdc++.h> using namespace std; ty ...

  8. BZOJ2427:[HAOI2010]软件安装——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2427 https://www.luogu.org/problemnew/show/P2515 现在 ...

  9. 【P2514】工厂选址(贪心)

    看到题了不首先应该看看数据范围确定一下算法么,这个题的数据范围大约可以支持到O(nmlogm),所以肯定不是搜索什么的,DP貌似至少也要n^2m,所以可以想一些其他的.对于题目的输入,我们发现这些输入 ...

随机推荐

  1. MVC 下拉框联动效果(单选)

    下拉框联动效果,我们以部门--职位为例,选择部门时,关联到该部门的职位.下拉框的写法就不多说了,详细请参照前文. 视图: 其中,dept是部门的属性,deptlist是部门下拉框的属性,job是职位的 ...

  2. CSS学习(二)

    display :   block    inline-block    inline block此元素将显示为块级元素,此元素前后会带有换行符. inline默认.此元素会被显示为内联元素,元素前后 ...

  3. spring设置字符编码过滤器

    一.在web.xml中的配置 <!-- characterEncodingFilter字符编码过滤器 --> <filter> <filter-name>chara ...

  4. 五、mybatis集成使用

    1.添加依赖 <!-- mybatis-spring集成--> <dependency> <groupId>org.mybatis.spring.boot</ ...

  5. vcfc之zk+postsql+keystore(cassandra)框架分析

    vcfc框架总结: 1 一. bus和keystore是如何协调处理的,什么样的问题是处理不了的? 1. 如果在备重启的过程中,主处理了某个时间1,备机如果同步数据呢? 二 .数据可靠性和一致性分析 ...

  6. ubuntu 16.10安装nginx

    1 : cd /usr/local 2 : sudo wget http://nginx.org/download/nginx-1.2.8.tar.gz 3 : sudo tar -zxvf ngin ...

  7. JavaScript里面的居民们2-字符串

    基于HTML,实现需求 按照HTML中按钮的描述以此实现功能 计算结果显示在 id 为 result 的 P 标签中 <!DOCTYPE html> <html> <he ...

  8. 【转】46 个非常有用的 PHP 代码片段

    1. 发送 SMS 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息.下面的 PHP 代码就实现了发送 SMS 的功能. 为了使用任何的语言 ...

  9. 05_zookeeper的ACL

    [ACL概述] ACL:access control Lists,权限控制. * 针对节点可以设置相关的读写等权限,目的是为了保障数据安全性. * 权限permissions可以指定不同的权限范围以及 ...

  10. 微信小程序开发3-小程序的代码组成

    1.​小程序由配置代码JSON文件.模板代码 WXML 文件.样式代码 WXSS文件以及逻辑代码 JavaScript文件组成 2.JSON: (JavaScript Object Notation) ...