订货(bzoj 2424)

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

#include<cstdio>
#include<iostream>
/*
  状态很好定义:f[i][j]表示到第i个月底,存货为j的最小花费。
  转移方程:f[i][j]=min{f[i-1][k]+k*m+(u[i]+j-k)*w[i]}(k≤u[i]+j)
                  =min{f[i-1][k]+k*(m-w[i])}+(u[i]+j)*w[i](k≤u[i]+j)
  因为在枚举j时,k的取值范围也是不断增大的,所以可以用以前的来更新现在的。
*/
#include<cstring>
#define N 60
#define M 10010
using namespace std;
int n,m,S,u[N],d[N],f[N][M];
int main(){
    scanf("%d%d%d",&n,&m,&S);
    for(int i=1;i<=n;i++)scanf("%d",&u[i]);
    for(int i=1;i<=n;i++)scanf("%d",&d[i]);
    for(int i=1;i<=S;i++)f[0][i]=1e9;
    for(int i=1;i<=n;i++){
        int res=1e9,k=0;
        for(int j=0;j<=S;j++){
            while(k<=min(u[i]+j,S)){res=min(res,f[i-1][k]+k*(m-d[i]));k++;}
            f[i][j]=res+(u[i]+j)*d[i];
        }
    }
    printf("%d",f[n][0]);
    return 0;
时间: 2024-10-24 22:32:31

订货(bzoj 2424)的相关文章

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 <

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

BZOJ 2424 订货(贪心+单调队列)

怎么题解都是用费用流做的啊...用单调队列多优美啊. 题意:某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为零,问如何安排这n个月订购计划,才能使成本最低?每月月初订购,订购后产品立即到货,进库并供应市场,于当月被售掉则不必付存贮费.假设仓库容量为S. 首先这道题和经典的汽车加油问题差不多,那道题可以用单调队列做,然而这道题也是可以的. 此题唯一的难点在于存储费用m,也

BZOJ 2424 订货

费用流. #include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #define maxv 250 #define maxe 1000050 #define inf 2000000000 using namespace std; int n,m,S,u[maxv],d[maxv],nume=1,g[maxv],dis[max

bzoj 2424

裸费用流,要注意的是当天供应的东西不一定要从仓库里拿,所以S限制的容量应该是i'-(i+1)的 数据那么弱,暴力或许过得去? 1 #include<bits/stdc++.h> 2 #define inc(i,l,r) for(int i=l;i<=r;i++) 3 #define dec(i,l,r) for(int i=l;i>=r;i--) 4 #define link(x) for(edge *j=h[x];j;j=j->next) 5 #define mem(a)

【BZOJ】【2424】【HAOI2010】订货

网络流/费用流 比较简单的题……我一开始想成像软件开发那题一样的做法了……就是每天拆点,S->i (INF,0) .i+n->T (u[i],0) 然后处理购入 S->i+n (INF,v[i]) 以及放置仓库 i->i+1 (s,m).i->i+n+1 (s,m) 然后顺利WA了……没想通为什么…… 实际上不用拆的,直接建就可以S->i (INF,0). i->T (u[i],0). i->i+1 (s,m) 就连这三种边就行了= = 1 /*******

[费用流]Bzoj P2424 订货

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

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(