1. 程式人生 > >bzoj1061 [Noi2008]志願者招募(線性規劃/費用流)

bzoj1061 [Noi2008]志願者招募(線性規劃/費用流)

這題太神了!但是聽說是單純形法求解線性規劃裸題???看樣子網路流和線性規劃有著莫大的聯絡啊,待研究。
此題基本就是用網路流求解了一個等式的最優解?
附上大神題解:https://www.byvoid.com/zhs/blog/noi-2008-employee

upd:單純形確實很強orz,因為要求的這個東西不是標準型線性規劃,我們把他對偶了就可以了。
附上大神題解:portal

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace
std; #define ll long long #define inf 0x3f3f3f3f #define N 1010 inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,m,h[N],num=1,ans=0,dis[N],path[N],T=1005
; bool inq[N]; struct edge{ int to,next,w,c; }data[25000]; inline void add(int x,int y,int w,int c){ data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].w=w;data[num].c=c; data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].w=0;data[num].c=-c; } inline bool spfa(){ deque<int>
q;memset(dis,inf,sizeof(dis));memset(path,0,sizeof(path)); q.push_back(0);inq[0]=1;dis[0]=0; while(!q.empty()){ int x=q.front();q.pop_front();inq[x]=0; for(int i=h[x];i;i=data[i].next){ int y=data[i].to;if(!data[i].w) continue; if(dis[x]+data[i].c<dis[y]){ dis[y]=dis[x]+data[i].c;path[y]=i; if(!inq[y]){ if(!q.empty()&&dis[y]<dis[q.front()]) q.push_front(y); else q.push_back(y);inq[y]=1; } } } }return path[T]; } int main(){ // freopen("a.in","r",stdin); n=read();m=read();int last=0; for(int i=1;i<=n;++i){ int x=read();if(x-last>0) add(0,i,x-last,0); else add(i,T,last-x,0);last=x; }add(n+1,T,last,0); for(int i=1;i<=m;++i){ int x=read(),y=read(),val=read();add(x,y+1,inf,val); }for(int i=1;i<=n;++i) add(i+1,i,inf,0); while(spfa()){ int now=T,low=inf; while(path[now]) low=min(low,data[path[now]].w),now=data[path[now]^1].to; now=T;ans+=low*dis[T]; while(path[now]) data[path[now]].w-=low,data[path[now]^1].w+=low,now=data[path[now]^1].to; }printf("%d\n",ans); return 0; }

單純形

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define eps 1e-7
#define N 1010
#define M 10010
#define inf 0x3f3f3f3f
int n,m;
double a[M][N],ans=0;
inline char gc(){
    static char buf[1<<16],*S,*T;
    if(S==T){T=(S=buf)+fread(buf,1,1<<16,stdin);if(T==S) return EOF;}
    return *S++;
}
inline int read(){
    int x=0,f=1;char ch=gc();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=gc();
    return x*f;
}
inline void pivot(int l,int e){
    double t=a[l][e];a[l][e]=1;
    for(int i=0;i<=n;++i) a[l][i]/=a[l][e];
    for(int i=0;i<=m;++i){
        if(i==l||abs(a[i][e])<eps) continue;
        t=a[i][e];a[i][e]=0;
        for(int j=0;j<=n;++j) a[i][j]-=a[l][j]*t;
    }
}
inline bool simplex(){
    while(1){
        int l=0,e=0;double mn=inf;
        for(int j=1;j<=n;++j) if(a[0][j]>eps){e=j;break;}
        if(!e) return 1;
        for(int i=1;i<=m;++i)
            if(a[i][e]>eps&&a[i][0]/a[i][e]<mn) mn=a[i][0]/a[i][e],l=i;
        if(!l) return 0;pivot(l,e);
    }
}
int main(){
//  freopen("a.in","r",stdin);
    n=read();m=read();
    for(int i=1;i<=n;++i) a[0][i]=read();
    for(int i=1;i<=m;++i){
        int x=read(),y=read();a[i][0]=read();
        for(int j=x;j<=y;++j) a[i][j]=1;
    }simplex();
    printf("%d\n",-(int)a[0][0]);
    return 0;
}

相關推薦

bzoj1061 [Noi2008]志願者招募線性規劃/費用

這題太神了!但是聽說是單純形法求解線性規劃裸題???看樣子網路流和線性規劃有著莫大的聯絡啊,待研究。 此題基本就是用網路流求解了一個等式的最優解? 附上大神題解:https://www.byvoid

bzoj1061 [Noi2008]志願者招募網路解決線性規劃問題

bzoj1061 [Noi2008]志願者招募 題意: 一個專案需要N 天才能完成,其中第i 天至少需要Ai 個人。一共有M 類志願者可以招募。其中第i 類可以從第Si 天工作到第Ti 天,招募

[BZOJ1061][NOI2008]志願者招募費用神題單純形裸題

題目描述 傳送門 題解 關於費用流的神建圖我無言以對。 轉自神犇的部落格:https://www.byvoid.com/blog/noi-2008-employee/ 關於單純形。。。裸題

【BZOJ 1061】 1061: [Noi2008]志願者招募 線性規劃與網路**

1061: [Noi2008]志願者招募 Description   申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了一個難 題:為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要N 天才能完成,其中第i 天至少需要 Ai 個人。 布布通過了解得知

[BZOJ1061][NOI2008]志願者招募 費用

/************************************************************** Problem: 1061 User: di4CoveRy Language: C++ Resul

bzoj1061: [Noi2008]志願者招募 費用

首先貼個線性規劃原問題模型: max c1x1+c2x2+...cnxn 約束條件 ai1x1+ai2x2+...ainxn>=bi ai1x1+ai2x2+...ainxn=bi ai1x1+ai2x2+...ainxn<=bi ai1x1+ai2x2+...

[Noi2008]志願者招募BZOJ1061

相關連結: http://www.lydsy.com/JudgeOnline/problem.php?id=1061 題目大意: 申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了一個難 題:為即將啟動的奧運新專案招募一批短期志願

BZOJ1061: [Noi2008]志願者招募 && 單純形學習筆記

題目 題解 終於搞完了單純形,還真不是個簡單的東西,但是理解之後,演算法挺簡單的,證明只有自動略過了qwq。 學習單純形推薦算導29章,嚴密又不失詳細。 標準的線性規劃式子是,A=(aij),b=(bi),c=(ci),x=(xi) 大小的話A

1061 志願者招募 利用網路流量平衡進行等式建模

1061: [Noi2008]志願者招募 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 5862  Solved: 3529 [Submit][Status][Discuss] Description   申奧成功

NOI 2008 志願者招募(最小費用)

        神奇的費用流……可以看這個https://www.byvoid.com/blog/noi-2008-employee/#more-916,大概就是列出等式,利用網路流流量平衡的條件保證等式相等,然後用費用流就可以算出最小的費用。感覺又學到了新技能。。。用了早

刷題總結——支線劇情bzoj3876費用

inpu 代碼 電視劇 pac ring 新的遊戲 mat tar algorithm 題目: 【故事背景】 宅男JYY非常喜歡玩RPG遊戲,比如仙劍,軒轅劍等等。不過JYY喜歡的並不是戰鬥場景,而是類似電視劇一般的充滿恩怨情仇的劇情。這些遊戲往往 都有很多的支線劇情,現在

【BZOJ3638】Cf172 k-Maximum Subsequence Sum 線段樹區間合並模擬費用

font uil sin upper sample dex else name etc 【BZOJ3638】Cf172 k-Maximum Subsequence Sum Description 給一列數,要求支持操作: 1.修改某個數的值 2.讀入l,r,k,詢問

【BZOJ3502/2288】PA2012 Tanie linie/【POJ Challenge】生日禮物 堆+鏈表模擬費用

line make 前驅 string urn return namespace 禮物 iostream 【BZOJ3502】PA2012 Tanie linie Description n個數字,求不相交的總和最大的最多k個連續子序列。 1<= k<

線性規劃費用解法(Bzoj1061: [Noi2008]誌願者招募)

UC ++ 求解 oid const mem IV memset cpp 題面 傳送門 Sol 線性規劃費用流解法用與求解未知數為非負數的問題 這道題可以列出一堆形如 \(x[i]+x[j]+x[k]+...>=a[p]\) 的不等式 我們強行給每個式子減去一個東西,

[BZOJ]4842: [Neerc2016]Delight for a Cat 1061: [Noi2008]志願者招募 費用 線性規劃

題解: 把這兩道題目放在一起寫,因為做法是一樣的。 兩題都是經典的線性規劃問題,但同時也都可以用費用流解決。 以志願者招募這題為例,首先設第 i

[NOI 2008]志願者招募費用

【題目描述】: 一共有n天,每天需要a[i]個人,一共有m類志願者,每類有無限個,可以從s[i]服務到t[i],需要花費c[i]的費用。問要滿足要求,最小的費用。 【題目分析】: 這題有一個經典的也很奇妙的構圖法:利用不等式構圖~這個我不懂,想看的話請到byvoid神牛的bl

洛谷 P3980 [NOI2008]志願者招募 費用

題目描述 申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了一個難題:為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要N 天才能完成,其中第i 天至少需要Ai 個人。 布布通過了解得知,一共有M 類志願者

誌願者招募 HYSBZ - 1061公式建圖費用

找到 bitset size eof 除了 分享圖片 rep 資源 trie 轉自神犇:https://www.cnblogs.com/jianglangcaijin/p/3799759.html 題意:申奧成功後,布布經過不懈努力,終於 成為奧組委下屬公司人力資源部門的主

[NOI2008]志願者招募,洛谷P3980,線性規劃對偶定理以及整數解

正題       題目連結       這一題很容易構造一個線性規劃的模型。       對於每一天,在這一天的志願者的總和大於等於需要的人數,最小化每種志願者乘其單價費用的和。  

BZOJ1061】[Noi2008]志願者招募【單純形法】

雙倍經驗題,BZOJ3265。 先用對偶原則轉換成求對偶問題的解,這樣直接轉化成了標準型,然後跑Simplex就好了。 下面是對樣例的一個計算過程。 /* Footprints In The