w 教授正在為國家航天中心計畫一系列的太空飛行。每次太空飛行可進行一系列商業性實驗而獲取利潤。現已確定了乙個可供選擇的實驗集合
e=,和進行這些實驗需要使用的全部儀器的集合i=。 實驗 ej需要用到的儀器是i的子集jíi。配置儀器ik的費用
為ck美元。實驗ej的贊助商已同意為該實驗結果支付pj美元。w教授的任務是找出乙個有效演算法,確定在一次太空飛行中要進行哪些實驗並因此而配置
哪些儀器才能使太空飛行的淨收益最大。這裡淨收益是指進行實驗所獲得的全部收入與配置儀器的全部費用的差額。
對於給定的實驗和儀器配置情況,程式設計找出淨收益最大的試驗計畫。
由檔案input.txt提供輸入資料。檔案第 1行有 2 個正整數 m和 n。m是實驗數,n是儀器數。接下來的 m 行,每行是乙個實驗的有關資料。第乙個
數贊助商同意支付該實驗的費用;接著是該實驗需要用到的若干儀器的編號。最後一行的 n個數是配置每個儀器的費用。
程式執行結束時,將最佳實驗方案輸出到檔案 output.txt 中。第 1 行是實驗編號;第 2 行是儀器編號;最後一行是淨收益。
input.txt
2 3
10 1 2
25 2 3
5 6 7
code:output.txt
1 2
1 2 3
17
#include
#include
const
int inf=1e9;
struct
queue
inline
void push(int n)
inline
int front()
inline
void pop()
inline
bool empty()
}q;struct edge
a[10000];
int w[10000];
char s[10000];
int head[1000];
int deep[1000];
bool b[1000];
int n,m,num=1,sum,x,tot,s,t,ans;
inline
int min(int a,int b)
inline
int getnum(int len)
return id;
}inline
void add(int x,int y,int cap)
inline
bool bfs(int s,int t)
return deep[t]int dfs(int now,int t,int limit)
deep[now]=-1;
return flow;
}inline
int dinic(int s,int t)
int main()
for(int i=1;i<=n;i++)
scanf("%d",&x),add(m+i,t,x);
ans=sum-dinic(s,t);
for(int i=1;i<=m;i++)
if(b[i]) printf("%d ",i);
printf("\n");
for(int i=m+1;i<=m+n;i++)
if(b[i]) printf("%d ",i-m);
printf("\n%d",ans);
return
0;}
太空飛行計畫問題
網路流最小費用問題 一開始看這個人的部落格 寫了4天了,還是沒能寫出自己的 後面面還有在這個oj上ac了的 照著這個人的 打,還是沒能想明白。這個 和這個oj上的不同,是簡化問題了的。只求最大收益 照著打的 include include include include define inf 999...
太空飛行計畫問題
跟拍照幾乎是重題。在輸出部分,若最後一次bfs還能到這個點,則可以輸出。只要有乙個點可以從源點過得去,就可以通過正或反流到達所有經過的點。但是我不明白若把所有專案都割掉了,那不就嘎嘎了。這裡也求廣大讀者說出自己的理解。看 includeusing namespace std define inf 1...
太空飛行計畫
太空飛行計畫 題目描述 輸入格式 2209.in 檔案第1行有2 個正整數m和 n。m是實驗數,n是儀器數。接下來的 m行,每行是乙個實驗的有關資料。第乙個數贊助商同意支付該實驗的費用 接著是該實驗需要用到的若干儀器的編號。最後一行的 n個數是配置每個儀器的費用。1 n,m 50 輸出格式 2209...