有
n 件工作要分配給
n個人做。 第 i
個人做第
j件工作產生的效益為 ci
j 。
試設計乙個將
n 件工作分配給
n個人做的分配方案,使產生的總效益最大。
對於給定的
n 件工作和
n個人,計算最優分配方案和最差分配方案。
檔案的第
1 行有
1個正整數
n ,表示有
n件工作要分配給
n 個人做。
接下來的
n行中,每行有
n 個整數 ci
j,1≤
i≤n,
1≤j≤
n(n<=
100)
,表示第
i 個人做 第 j
件工作產生的效益為 ci
j 。
程式執行結束時,將計算出的最小總效益和最大總效益輸出到檔案。
52 2 2 1 2
2 3 1 2 4
2 0 1 1 1
2 3 4 3 3
3 2 1 2 1
5第一次打費用流的題目。14
本題建模很容易看出來,就只是加乙個源點和匯點。
至於兩個要求,就分別求出最小費用流和最大費用流即可。
[cpp]
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define maxn (250)
#define ss 0
#define tt 220
#define min(x,y) ((x)<(y)?(x):(y))
using
namespace std;
int n,cnt,ans;
int head[maxn],nxt[maxn*maxn*2],data[maxn*maxn*2],flow[maxn*maxn*2],wei[maxn*maxn*2];
int flow2[maxn*maxn*2];
int pre[maxn],dis[maxn];
bool in_stack[maxn];
queueq;
void add(int x,int y,int z,int w)
bool bfs1()
} }
} return dis[tt]0;
} bool bfs2()
} }
} return pre[tt]>0;
} void dfs1()
} void dfs2()
} int main()
} memcpy(flow2,flow,sizeof flow);
ans=0;
while(bfs1())dfs1();
for(int i=0;iif(data[i]>=n+1&&data[i]<=n+n&&!flow[i])ans+=wei[i];
printf(」%d\n」,ans);
ans=0;
while(bfs2())dfs2();
for(int i=0;iif(data[i]>=n+1&&data[i]<=n+n&&!flow2[i])ans+=wei[i];
printf(」%d\n」,ans);
return 0;
}
網路流二十四題之分配問題
沒想到codevs上的資料和我本地的資料是一樣的 這下不用寫多餘的 了 這道題和上一道題一樣水,按照提議寫成二分圖就行。1.源點向每個人連一條邊,容量1,費用0,每個任務向匯點連一條邊,容量1,費用0 2.每個人向每個任務連一條邊,容量1,費用為cij 跑兩次費用流就行 include includ...
網路流二十四題
開始了我的網路流 24 題之旅,寫在一起到時候方便一起複習哦。其實這並不是真的二十四題,有一些過於水的我就不寫上來了。然後有的 太水了就不寫了。感覺這些題目還是比較基礎的,方法卻值得借鑑!剩餘題目 航空路線問題 火星探險問題以下 題目描述 點此看題 解法 你發現時間是最大的障礙,因為對於不同的時間飛...
網路流二十四題之航空路線問題
這道題的建模很有意思 1.首先每個點,除了起點,都向拆點後的點練一天容量1,費用 1的邊,代表只能走一次,負費用是為了求最大的費用,也就是最多的經過點。對於起點,容量變成2,費用不變。2.其次對於一天航線,終點在拆點後的點集向起點連一條邊,容量無限,費用為0,代表兩個城市可以達到。之後一次費用流,如...