HDU 3315 My Brute(KM算法)
2017-01-03 19:21
253 查看
和之前做过的一题差不多,好像是2853。
#include<iostream> using namespace std; const int maxn=100+5; int w[maxn][maxn],n; int lx[maxn],ly[maxn]; int Left[maxn]; bool s[maxn],t[maxn]; int v[maxn],h[maxn],p[maxn],a[maxn],b[maxn]; bool match(int i) { s[i]=true; for(int j=1;j<=n;j++) if(lx[i]+ly[j]==w[i][j]&&!t[j]){ t[j]=true; if(!Left[j]||match(Left[j])){ Left[j]=i; return true; } } return false; } void update() { int a=(1<<30); for(int i=1;i<=n;i++) if(s[i]) for(int j=1;j<=n;j++) if(!t[j]) a=min(a,lx[i]+ly[j]-w[i][j]); for(int i=1;i<=n;i++){ if(s[i]) lx[i]-=a; if(t[i]) ly[i]+=a; } } void KM() { for(int i=1;i<=n;i++){ Left[i]=lx[i]=ly[i]=0; for(int j=1;j<=n;j++) lx[i]=max(lx[i],w[i][j]); } for(int i=1;i<=n;i++){ for(;;) { for(int j=1;j<=n;j++) s[j]=t[j]=0; if(match(i)) break;else update(); } } } int win(int h1,int a1,int p1,int b1) { while(h1>0&&p1>0) { p1-=a1; if(p1<=0) return 1; h1-=b1; if(h1<=0) return -1; } return 0; } int main() { while(scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) scanf("%d",&v[i]); for(int i=1;i<=n;i++) scanf("%d",&h[i]); for(int i=1;i<=n;i++) scanf("%d",&p[i]); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int ans=win(h[i],a[i],p[j],b[j]); if(ans==1) w[i][j]=ans*v[i]*100; else w[i][j]=ans*v[i]*100; if(i==j) w[i][j]+=1; } } KM(); int ans=0; for(int i=1;i<=n;i++) ans+=w[Left[i]][i]; if(ans>=0) printf("%d %.3f%%\n",ans/100,ans%100/(double)n*100); else printf("Oh, I lose my dear seaco!\n"); } return 0; }
相关文章推荐
- My Brute (hdu 3315 二分图最大权匹配KM算法)
- HDU 3315 My Brute(二分图最佳匹配+尽量保持原先匹配)
- HDU 3315 My Brute(考虑优先次序的费用流)@
- HDU 3315 My Brute
- HDU 3315 My Brute(费用流)
- HDU 3315 KM My Brute
- HDU 3315 My Brute(KM最大匹配)
- HDU 3315 My Brute(二分图最优匹配:优先用原匹配边)
- HDU 3315 My Brute(二分图最优匹配)
- HDU 3315 My Brute
- HDU 3315 My Brute(二分图最优匹配:优先用原匹配边)
- HDU 3315 My Brute(费用流)
- hdu 3315 My Brute 费用流,费用最小且代价最小
- HDU 3315 My Brute(费用流)
- hdu 3315 My Brute 费用流,费用最小且代价最小
- HDU 3315 My Brute(费用流)
- HDU 2853 Assignment & HDU 3315 My Brute
- HDU-3315 My Brute
- HDU 3315 My Brute 费用流
- hdu 1533 Going Home【KM算法求最大权匹配】