zoukankan      html  css  js  c++  java
  • 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 , ... , 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<queue>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define MAXN 53
    #define MAXM 350
    using namespace std;
    
    struct na{
        int y,z,f,ne;
    };
    int n,m,l[MAXN],r[MAXN],num=0,p,ch,ans=0,S,T,k,dis[MAXN],an=0,mi[MAXN],ro[MAXN],qi[MAXN];
    na b[MAXM];
    bool bo[MAXN];
    const int INF=1e9;
    queue<int> q;
    inline int min(int x,int y){return x>y?y:x;}
    inline void spfa(){
        register int i;
        q.push(S);
        bo[S]=1;
        for (i=0;i<=n;i++) dis[i]=INF;
        mi[S]=INF;dis[S]=0;dis[T]=INF;
        while(!q.empty()){
            int k=q.front();q.pop();bo[k]=0;
            if (k==T) continue;
            for (i=l[k];i;i=b[i].ne){
                if (b[i].z>0&&dis[b[i].y]>b[i].f+dis[k]){
                    dis[b[i].y]=b[i].f+dis[k];
                    mi[b[i].y]=min(mi[k],b[i].z);
                    ro[b[i].y]=i;
                    qi[b[i].y]=k;
                    if (!bo[b[i].y]){
                        bo[b[i].y]=1;
                        q.push(b[i].y);
                    }
                }
            }
        }
    }
    inline int read(){
        p=0;ch=getchar();
        while (ch<'0'||ch>'9') ch=getchar();
        while (ch>='0'&&ch<='9') p=p*10+ch-48, ch=getchar();
        return p;
    }
    inline int add(int x,int y,int z,int f){
        num++;
        if (l[x]==0) l[x]=num;else b[r[x]].ne=num;
        b[num].y=y;b[num].z=z;b[num].f=f;r[x]=num;
    }
    inline void in(int x,int y,int z,int f){
        add(x,y,z,f);add(y,x,0,-f);
    }
    int main(){
        register int i;
        n=read();m=read();k=read();
        S=n+1;T=n+2;
        for (i=1;i<=n;i++) in(i,T,read(),0);
        for (i=1;i<=n;i++) in(S,i,INF,read());
        for (i=1;i<n;i++) in(i,i+1,k,m);
        for(;;){
            spfa();
            if (dis[T]==INF) break;
            an+=mi[T]*dis[T];
            for (i=T;i;i=qi[i]) b[ro[i]].z-=mi[T],b[((ro[i]-1)^1)+1].z+=mi[T];
        }
        printf("%d
    ",an);
    }
  • 相关阅读:
    some tips
    ORA00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together
    Chapter 01Overview of Oracle 9i Database Perfomrmance Tuning
    Chapter 02Diagnostic and Tuning Tools
    变量与常用符号
    Chapter 18Tuning the Operating System
    标准输入输出
    Trace files
    DBADeveloped Tools
    Chapter 03Database Configuration and IO Issues
  • 原文地址:https://www.cnblogs.com/Enceladus/p/5186994.html
Copyright © 2011-2022 走看看