2426: [HAOI2010]工厂选址

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 364  Solved: 248
[Submit][Status][Discuss]

Description

某地区有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座煤矿开采的原煤应如何分配给两个发电厂,才能使每年的总费用(发电厂运行费用与原煤运费之和)为最小。 

Input

第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

Output

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

第2行:总费用 

Sample Input

4 2 7 9
3 1 10 3
6 3 7 1 10 2 7 4 9
1 2 4 3
6 6 8 2
4 10 8 4
10 2 9 2
7 6 6 2
9 3 7 1
2 1 6 9
3 1 10 9
4 2 1 8
2 1 3 4

Sample Output

8
49

HINT

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

Source

[Submit][Status][Discuss]

枚举一下选择哪个新工厂,然后贪心的分配每个煤矿的分配即可得到当前的最有答案,更新全局最优解。

 #include <bits/stdc++.h>

 #define rep(i,x,y) for(int i=x;i<=y;++i)

 template <class T>
inline void read(T &x)
{
static char c; x = ;
c = getchar();
while (c < )c = getchar();
while (c > )x = x * + c - '', c = getchar();
} const int mxn = ;
const int mxm = ;
const int inf = 1E9 + ; int m, b, h, n; int A[mxm];
int H[mxn];
int C[mxn][mxm]; int ans = inf, id = ; int seq[mxm], sub[mxm]; inline bool cmp(int a, int b)
{
return sub[a] < sub[b];
} inline void calculate(int t)
{
int cost = h + H[t], tmp = b; rep (i, , m)cost += A[i] * C[t][i];
rep (i, , m)seq[i] = i, sub[i] = C[][i] - C[t][i]; std::sort(seq + , seq + m + , cmp); rep (i, , m)if (tmp)
{
int q = seq[i]; if (tmp >= A[q])
cost += sub[q] * A[q], tmp -= A[q];
else
cost += sub[q] * tmp, tmp = ;
} if (ans > cost)
ans = cost, id = t;
} signed main(void)
{
read(m);
read(b);
read(h);
read(n); rep (i, , m)read(A[i]);
rep (i, , n)read(H[i]);
rep (i, , n)rep (j, , m)read(C[i][j]); rep (i, , n)calculate(i); printf("%d\n%d\n", id, ans);
}

@Author: YouSiki

BZOJ 2426: [HAOI2010]工厂选址的更多相关文章

  1. 2426: [HAOI2010]工厂选址

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

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

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

  3. BZOJ2426 [HAOI2010]工厂选址

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

  4. HAOI2010 工厂选址

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

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

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

  6. bzoj 2426 【HAOI2010】工程选址 贪心

    [HAOI2010]工厂选址 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 447  Solved: 308[Submit][Status][Disc ...

  7. 【HAOI2010】工厂选址题解

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

  8. BZOJ 2424: [HAOI2010]订货

    2424: [HAOI2010]订货 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 915  Solved: 639[Submit][Status][ ...

  9. BZOJ 2424: [HAOI2010]订货 费用流

    2424: [HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月 ...

随机推荐

  1. 基本数据结构 -- 栈简介(C语言实现)

    栈是一种后进先出的线性表,是最基本的一种数据结构,在许多地方都有应用. 一.什么是栈 栈是限制插入和删除只能在一个位置上进行的线性表.其中,允许插入和删除的一端位于表的末端,叫做栈顶(top),不允许 ...

  2. HTML(2)普通文本的修饰

    段落标签 <p> 我们使用<p>...</p>标签来标记一个段落,两个段落之间会自动换行.需要注意的是,在书写HTML时,连续的空格只被看作一个空格,如果需要插入空 ...

  3. java按照字节切割字符串,解决汉字的问题

    编写一个截取字符串的函数,输入为一个字符串,截取开始地址,截取字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个, 如“我ABC”,0,4,应该截为“我AB”,输入“我ABC汉DEF”,1, ...

  4. 使用spring整合Quartz实现—定时器

    使用spring整合Quartz实现—定时器(Maven项目做演示) 不基于特定的基类的方法 一,开发环境以及依赖的jar包 Spring 4.2.6.RELEASE Maven 3.3.9 Jdk ...

  5. alias命令详情

    基础命令学习目录首页 原文链接:http://c.biancheng.net/view/938.html 给命令设置别名,你可以把它当作命令的"小名",但是这样做有什么意义呢? 比 ...

  6. OO第三次阶段总结

    (1)调研,规格化设计的大致发展和为什么得到人类重视 结构化程序设计(英语:Structured programming),一种编程范型.它采用子程序(函数就是一种子程序).代码区块.for循环以及w ...

  7. java布局学习(新)

    坚持学习java一段时间,最近自己需要做一个小型的系统,所以需要自己将自己的AWT知识巩固一下. 一.4大布局管理器. 1.边界布局BorderLayout 是JFrame和JDialog的默认布局方 ...

  8. sampleFactory(女娲造人)

    使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象. package c ...

  9. 利用Hibernate子查询(in) 得到部分字段(实体类的构造函数)

    感人= = 终于弄好了 String hql="select new Shop(s.strid,s.shopname,s.tradearea,s.discountinfo,s.beginti ...

  10. thinkphp学习3-模板与视图

    1.模板赋值 如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值. $this->assign('na ...