time limit: 10 sec memory limit: 162 mb
submit: 1351 solved: 748
[submit][status][discuss]
某軟體公司正在規劃一項n天的軟體開發計畫,根據開發計畫第i天需要ni個軟體開發人員,為了提高軟體開發人員的效率,公司給軟體人員提供了很多的服務,其中一項服務就是要為每個開發人員每天提供一塊消毒毛巾,這種消毒毛巾使用一天後必須再做消毒處理後才能使用。消毒方式有兩種,a種方式的消毒需要a天時間,b種方式的消毒需要b天(b>a),a種消毒方式的費用為每塊毛巾fa, b種消毒方式的費用為每塊毛巾fb,而買一塊新毛巾的費用為f(新毛巾是已消毒的,當天可以使用);而且f>fa>fb。公司經理正在規劃在這n天中,每天買多少塊新毛巾、每天送多少塊毛巾進行a種消毒和每天送多少塊毛巾進行b種消毒。當然,公司經理希望費用最低。你的任務就是:為該軟體公司計畫每天買多少塊毛巾、每天多少塊毛巾進行a種消毒和多少毛巾進行b種消毒,使公司在這項n天的軟體開發中,提供毛巾服務的總費用最低。
第1行為n,a,b,f,fa,fb. 第2行為n1,n2,……,nn. (注:1≤f,fa,fb≤60,1≤n≤1000)
最少費用
4 1 2 3 2 1
8 2 1 6
38 1. 源點到第i天的入點連容量ni費用為0的邊
2. 第i天的出點到匯點連容量ni費用為0的邊
3. 源點到第i天的出點連容量為inf費用為f的邊(保證每天的出點到匯點滿流)
4. 第i天的入點到第i+a+1(i+b+1)天的出點連容量為inf費用為fa(fb)的邊(代表兩種消毒方式)
5. 第i天的入點到第i+1天的入點連容量為inf費用為0的邊(代表每天剩下的毛巾可以留到下一天)
1 #include2view code#define inf 2147483647
3#define rep(i,l,r) for(int i=l;i<=r;i++)
4#define n 10050
5using
namespace
std;
6struct
edgee[5000000];9
int head[n],tot=1,ans,dis[n],from
[n],r[n],n,t,a,b,f,fa,fb,c,s[n];
10bool
used[n];
11 inline void ins(int u,int v,int w,int
cost)
14 inline void insert(int u,int v,int w,int
cost)
17 inline bool
spfa() 27}
28 used[x]=0;29
}30if(dis[t]==inf) return
0;else
return1;
31}3233 inline void
run() 39}
4041 inline int
read()
47int
main ()
57while
(spfa()) run();
58 printf("%d"
,ans);
59 }
BZOJ1221 HNOI2001 軟體開發
某軟體公司正在規劃一項n天的軟體開發計畫,根據開發計畫第i天需要ni個軟體開發人員,為了提高軟體開發人員的效率,公司給軟體人員提供了很多的服務,其中一項服務就是要為每個開發人員每天提供一塊消毒毛巾,這種消毒毛巾使用一天後必須再做消毒處理後才能使用。消毒方式有兩種,a種方式的消毒需要a天時間,b種方式...
狡猾的商人 bzoj1202,HNOI2005
ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...
1221 HNOI2001 軟體開發
最小費用最大流。建圖 拆點,每個點拆成入點和出點。顯然,要滿足每天的餐巾 於是有附加源匯st,s向入點引一條容量為ni,費用為0的邊,出點向t引一條容量為ni,費用為0的邊。若滿足題目要求,這必有所有出點到t的弧滿載,為了保證這一點,由s向出點引容量為無窮,費用為f的邊。又因為每天沒用完的餐巾可以留...