【HAOI2010】工厂选址题解

题目描述

某地区有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[50005][55], cost[55], a[50005];
 struct Fact{
     int pos, val;
 }w[50005];
 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 = 1; i <= m; ++ i)    scanf("%d", &a[i]);
     for(int i = 1; i <= n; ++ i)    scanf("%d", &cost[i]);
     for(int i = 1; i <= m; ++ i)    scanf("%d", &c[i][0]);
     for(int i = 1; i <= n; ++ i)
         for(int j = 1; j <= m; ++ j)
             scanf("%d", &c[j][i]);
     for(int i = 1; i <= n; ++ i)
         {
             tag = 0, ans = 0;
             for(int j = 1; j <= m; ++ j)
                 {
                     w[j].val = c[j][i] - c[j][0];
                     w[j].pos = j;
                 }
             sort(w + 1, w + 1 + m, comp);
             int k = 0;
             for(;;)
                 {
                     ++ k;
                     if(tag + a[w[k].pos] > b)
                         {
                             ans += c[w[k].pos][0] * (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][0] * 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 0;
 }

 

转载于:https://www.cnblogs.com/2020pengxiyue/p/9459988.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点|应用落地,构建城市“大脑”

来源&#xff1a;IDC圈北京&#xff1a;“云”建智慧之都“全国政治中心、文化中心、国际交往中心、科技创新中心……”城市战略定位下的北京正处在落实首都城市战略定位、建设国际一流和谐宜居之都的关键时期。2020年初&#xff0c;新冠疫情爆发&#xff0c;北京市政府快速响应…

Leetcode--289. 生命游戏

根据百度百科&#xff0c;生命游戏&#xff0c;简称为生命&#xff0c;是英国数学家约翰何顿康威在1970年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live&#xff08;1&#xff09;即为活细胞…

深度信念网络研究现状与展望

来源&#xff1a;专知摘要: 深度信念网络(Deep belief network, DBN)是一种基于深度学习的生成模型, 克服了传统梯度类学习算法在处理深层结构所面临的梯度消失问题, 近几年来已成为深度学习领域的研究热点之一.基于分阶段学习的思想, 人们设计了不同结构和学习算法的深度信念网…

使用JDBC进行简单连接

学习笔记&#xff1a;JDBC与数据库 集训的有关总结 连接数据库&#xff08;MySQL&#xff09;的步骤&#xff1a; 导入jar包(可以去官网下) 复制mysql-connector-java-5.1.37-bin.jar到项目libs目录下 右键–>Add As Library 注册驱动 获取数据库连接对象Connection 定…

Leetcode--41. 缺失的第一个正数

给定一个未排序的整数数组&#xff0c;找出其中没有出现的最小的正整数。 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11,12] 输出: 1 说明: 你的算法的时间复杂度应为O(n)&#xff0c;并且只能使用常数级别的空间。 思路:时间…

深度学习中的3个秘密:集成、知识蒸馏和蒸馏

作者&#xff1a;Zeyuan Allen-Zhu来源&#xff1a;AI公园编译&#xff1a;ronghuaiyang在现在的标准技术下&#xff0c;例如过参数化、batch-normalization和添加残差连接&#xff0c;“现代”神经网络训练 —— 至少对于图像分类任务和许多其他任务来说 —— 通常是相当稳定的…

对于JDBC的简单理解

什么是JDBC&#xff1f;为什么要使用JDBC&#xff1f; 1. JDBC JDBC是Java DataBase Connectivity的缩写&#xff0c;即Java程序访问数据库的标准接口使用Java程序访问数据库时&#xff0c;通过JDBC接口来访问JDBC驱动来实现对数据库的操作JDBC接口是Java标准库自带的&#xf…

BeautifulSoup

BeautifulSoup是一个模块&#xff0c;该模块用于接收一个HTML或XML字符串&#xff0c;然后将其进行格式化&#xff0c;之后遍可以使用他提供的方法进行快速查找指定元素&#xff0c;从而使得在HTML或XML中查找指定元素变得简单。 1. 安装 pip3 install beautifulsoup42.示例 fr…

Leetcode-45. 跳跃游戏Ⅱ

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 …

研究揭示人类大脑进化的基因组调控机制

来源&#xff1a;中国科学院昆明动物研究所人类大脑起源于漫长的生命进化过程&#xff0c;其最显著的改变是大脑的认知功能&#xff0c;反映在脑容量的显著扩大和脑结构的高度精细化。在人类进化过程中&#xff0c;“哪些遗传改变造就了人类大脑”是学界长期力图解决的科学问题…

计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配

计算机组成原理笔记——存储器分类、层次结构、技术指标、存储单元地址分配 一. 概述 存储器的分类 按存储介质划分&#xff1a; (1)半导体存储器 双极型(TTL)、MOS (2)磁表面存储器 磁头、载磁体 (3)磁芯存储器(目前几乎已不被采用)硬磁材料、环状元件 (4)光盘存储器 激光、…

interceptor 拦截器的使用 (session验证)

需要引入 http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd之前是3.0.xsd mvc:exclude-mapping 报错 需要改成3.2.xsd <mvc:interceptors> <mvc:interceptor> <!-- 需拦截的地址 --> …

Leetcode--229. 求众数Ⅱ

给定一个大小为 n 的数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 说明: 要求算法的时间复杂度为 O(n)&#xff0c;空间复杂度为 O(1)。 示例 1: 输入: [3,2,3] 输出: [3] 示例 2: 输入: [1,1,1,3,3,2,2,2] 输出: [1,2] 思路&#xff1a; 摩尔投票法 超过…

刚刚,《The Scientist》预测了未来最热门的生命科学技术

图片来源&#xff1a;illumina来源&#xff1a;中国生物技术网去年&#xff0c;新冠疫情席卷全球&#xff0c;生物医学研究领域学者奋起应对挑战&#xff0c;并取得了前所未有的科学成就。2021年已来&#xff0c;尽管大流行还在继续&#xff0c;但美国《The Scientist&#xff…

Java Web项目的层次结构及常见分包

Java Web项目的层次结构及常见分包 Web项目中的层次 ControllerServiceDaoController层&#xff1a;表现层&#xff08;视图&#xff09;层。用来显示数据和接收用户数据Service层&#xff1a;业务逻辑层&#xff0c;用来处理页面。先写接口&#xff0c;后写实现类Dao层&#…

BZOJ3489 A simple rmq problem 【可持久化树套树】*

BZOJ3489 A simple rmq problem Description 因为是OJ上的题&#xff0c;就简单点好了。给出一个长度为n的序列&#xff0c;给出M个询问&#xff1a;在[l,r]之间找到一个在这个区间里只出现过一次的数&#xff0c;并且要求找的这个数尽可能大。如果找不到这样的数&#xff0c;则…

Leetcode--319. 灯泡开关

初始时有 n 个灯泡关闭。 第 1 轮&#xff0c;你打开所有的灯泡。 第 2 轮&#xff0c;每两个灯泡你关闭一次。 第 3 轮&#xff0c;每三个灯泡切换一次开关&#xff08;如果关闭则开启&#xff0c;如果开启则关闭&#xff09;。第 i 轮&#xff0c;每 i 个灯泡切换一次开关。 …

Eclipse中tomcat的简单配置

Eclipse中tomcat的简单配置 将Eclipse与tomcat相关联 如果下拉选项中没有jdk1.8.0_131&#xff0c;就点击后面的选项 把服务器视图调出来&#xff0c;方便之后调试 将tomcat服务器调入 如果要添加项目&#xff0c;点击右键&#xff0c;选择Add and Remove… 最后&#xff0…

AI智能体学会动物进化法则:李飞飞等提出深度进化RL

来源&#xff1a;机器之心编辑&#xff1a;杜伟、魔王、陈萍在过去 6 亿年中&#xff0c;进化带来了不同类型的「无尽之形最美」&#xff08;endless forms most beautiful&#xff09;&#xff0c;从古老的两侧对称虫到多种多样的动物形态。这些动物还展示出了显著的具身智能&…

Leetcode--22. 括号生成

给出 n 代表生成括号的对数&#xff0c;请你写出一个函数&#xff0c;使其能够生成所有可能的并且有效的括号组合。 例如&#xff0c;给出 n 3&#xff0c;生成结果为&#xff1a; [ "((()))", "(()())", "(())()", "()(())&quo…