bzoj2424: [HAOI2010]订货

最小费用最大流即可。-=a[t] 写成了-=-a[t],于是为此找了很久的错QAQsading

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
#define REP(i,s,t) for(int i=s;i<=t;i++)
#define qwq(x) for(edge*e=head[x];e;e=e->next)
const int nmax=55;
const int inf=0x3f3f3f3f;
int x;char c;
int read(){
	x=0;c=getchar();bool f=true;
	while(!isdigit(c)){
		if(c==‘-‘) f=false; c=getchar();
	}
	while(isdigit(c)) x=x*10+c-‘0‘,c=getchar();
	return f?x:-x;
}
struct edge{
	int to,cap,cost;edge *next,*rev;
};
edge edges[nmax<<3],*pt,*head[nmax],*p[nmax];
void add(int u,int v,int d,int w){
	pt->to=v;pt->cap=d;pt->cost=w;pt->next=head[u];head[u]=pt++;
}
void adde(int u,int v,int d,int w){
	add(u,v,d,w);add(v,u,0,-w);head[u]->rev=head[v];head[v]->rev=head[u];
}
int d[nmax],a[nmax];bool inq[nmax];
int mincost(int s,int t){
	int flow=0,cost=0;
	while(1){
		clr(inq,0);clr(d,0x3f);d[s]=0;inq[s]=1;a[s]=inf;
		queue<int>q;q.push(s);
		while(!q.empty()){
			int x=q.front();q.pop();inq[x]=0;
			qwq(x) if(e->cap>0&&d[e->to]>d[x]+e->cost){
				int to=e->to;
				d[to]=d[x]+e->cost;
				a[to]=min(a[x],e->cap);p[to]=e;
				if(!inq[to]) q.push(to),inq[to]=1;
			}
		}
		if(d[t]==inf) break;
		flow+=a[t];cost+=d[t]*a[t];
		int x=t;
		while(x!=s)
		   p[x]->cap-=a[t],p[x]->rev->cap+=a[t],x=p[x]->rev->to;
	//	printf("%d %d %d\n",d[t],flow,cost);
	}
	return cost;
}
int main(){
	int n=read(),m=read(),v=read();
	int s=0,t=n+1,tmp;
	pt=edges;clr(head,0);
	rep(i,n) tmp=read(),adde(i,t,tmp,0);
	rep(i,n) tmp=read(),adde(s,i,inf,tmp);
	rep(i,n-1) adde(i,i+1,v,m);
	/*REP(i,0,n+1){
		qwq(i) printf("%d %d  %d      ",e->to,e->cap,e->cost);
		printf("\n");
	}*/
	printf("%d\n",mincost(s,t));
	return 0;
}

2424: [HAOI2010]订货

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 809  Solved: 564
[Submit][Status][Discuss]

Description

某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费。假设仓库容量为S。

Input

第1行:n, m, S (0<=n<=50, 0<=m<=10, 0<=S<=10000)

第2行:U1 , U2 , ... , Ui , ... , Un (0<=Ui<=10000)

第3行:d1 , d2 , ..., di , ... , dn (0<=di<=100)

Output

只有1行,一个整数,代表最低成本

Sample Input

3 1 1000
2 4 8
1 2 4

Sample Output

34

HINT

Source

Day1

[Submit][Status][Discuss]

时间: 2024-10-11 13:32:14

bzoj2424: [HAOI2010]订货的相关文章

bzoj2424: [HAOI2010]订货(费用流)

2424: [HAOI2010]订货 题目:传送门 题解: 做多了最小割,做一下费用流练手 其实很容易就看出来是费用流啊,伏地魔肉老师用单调队列ORZ st直接连每个月,流量无限(随便买,花钱而已),费用就是给出来的 然后因为可以贮存嘛,那就第i个月连第i+1个月,流量为S(仓库容量),费用为m就OK 最后就是卖出去咯,第i个月连ed流量为需要的,费用为0 难受,打个spfa忘记出队列... 代码: 1 #include<cstdio> 2 #include<cstring> 3

【BZOJ2424】[HAOI2010]订货 最小费用流

[BZOJ2424][HAOI2010]订货 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费.假设仓库容量为S. Input 第1行:n, m, S (0<=n<=50, 0<=m<=10, 0<=S&

BZOJ 2424: [HAOI2010]订货 费用流

2424: [HAOI2010]订货 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=2424 Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后

BZOJ 2424: [HAOI2010]订货(最小费用最大流)

最小费用最大流..乱搞即可 ------------------------------------------------------------------------------ #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<queue> #define rep( i, n ) for( int i = 0; i <

P2517 [HAOI2010]订货(dp)

P2517 [HAOI2010]订货 设$f[i][j]$表示第$i$个月,库存为$j$的最小代价 枚举上个月的库存$k$,那么$f[i][j]=f[i-1][k]+(j+U[i]-k)*D[i]+j*m,k<=min(j+U[i],S)$ 复杂度$O(nS^2)$ 把上面的方程拆项 $f[i][j]=(j+U[i])*D[i]+j*m+{f[i-1][k]-k*D[i]},k<=min(j+U[i],S)$ 这个$k$可以直接跟着$j$维护,连单调队列都不用开 复杂度$O(nS)$ #inc

bzoj:2424: [HAOI2010]订货

Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费.假设仓库容量为S. Input 第1行:n, m, S (0<=n<=50, 0<=m<=10, 0<=S<=10000) 第2行:U1 , U2

[HAOI2010]订货

题目描述 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费.假设仓库容量为S. 输入输出格式 输入格式: 第1行:n, m, S (0<=n<=50, 0<=m<=10, 0<=S<=10000) 第2行:U1 , U2

[haoi2010]订货 最小费用流

这道题oj上的标签是动态规划,但我想不出来动态规划怎么搞,空间不爆,时间也要爆的: 好的,不扯淡,此题正常做法是最小费用流: 这道题我写了两遍,为什么呢?原因是第一次写的时候,不会写费用流,又恰好没带书,所以搁置了: 第二次又写到这道题了,有点生气,一鼓作气学了费用流,紧跟着敲了这道题: 也算一道费用流模板吧: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstrin

网络流专题练习Day2

04/17  目前做了:4题 由于目前四道都是1A感觉非常爽... BZOJ1412: [ZJOI2009]狼和羊的故事 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈可以看作一个n*m个矩阵格子,这个矩阵的边缘已经装上了篱笆.可是Drake很快发现狼再怎么也是狼,它们总是对羊垂涎三尺,那首歌只不过是一个动人的传说而已.所以Orez决定在羊狼圈中再加入一