bzoj 2426 HAOI2010 工廠選址

2021-08-16 15:37:22 字數 968 閱讀 6967

某地區有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座煤礦開採的原煤應如何分配給兩個發電廠,才能使每年的總費用(發電廠執行費用與原煤運費之和)為最小。

這道題首先列乙個式子,把所有煤礦集中在乙個廠址上,為s[i](s[i]=h[i]+c[i][j]*a[j] (1<=j<=m))。然後設j號礦中有x噸煤運到原有發電廠,那麼總費用變成s[i]-x*c[i][j]+x*c[0][j],合併s[i]+x(c[0][j]-c[i][j]),這道題是要求最小值,那就要x(c[0][j]-c[i][j])最小,也就是說要(c[0][j]-c[i][j])最小,那麼排一下序就可以了。這題就解決了。

#include

#include

#include

#include

#include

using

namespace

std;

struct node

ss[51000];

int a[51000],c[60][51000],h[60],s[60];

bool cmp(node a,node b)

int main()

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

if(s[i]printf("%d\n%d\n",id,ans+h);

return

0;}

bzoj2426 貪心 工廠選址

description 某地區有m座煤礦,其中第i號礦每年產量為ai噸,現有火力發電廠乙個,每年需用煤b噸,每年執行的固定費用 包括折舊費,不包括煤的運費 為h元,每噸原煤從第i號礦運到原有發電廠的運費為ci0 i 1,2,m 現規劃新建乙個發電廠,m座煤礦每年開採的原煤將全部供給這兩座發電廠。現有...

BZOJ1055 HAOI 玩具取名

某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後 他會根據自己的喜好,將名字中任意乙個字母用 wing 中任意兩個字母代替,使得自己的名字能夠擴充得很長。現在,他想請你猜猜某乙個很長的名字,最初可能是由哪幾個字母變形過來的。第一行四個整數w i n...

BZOJ 1046 HAOI 上公升序列

1046 haoi2007 上公升序列 time limit 10 sec memory limit 162 mbsubmit 5376 solved 1862 submit status discuss description 對於乙個給定的s 若有p 滿足 x1 x2 xm 且 ax1 2 出s...