花店橱窗布置(带权二分图最大匹配)
2016-11-08 21:40
309 查看
花店橱窗布置
题目描述:假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学效果。为了取得最佳的美学效果,必须使花的摆放取得最大的美学值。
输入描述:
第一行为两个整数F,V(F<=V<=100)
接下来F行每行V个整数,第i行第j个数表示第i束花放入第j个花瓶的美学值。
输出描述 Output Description
一个整数,即最大美学值。
样例输入:
2 2
10 0
5 2
样例输出:
12
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=110; const int inf=0x7fffffff; int n,m,w[maxn][maxn],lx[maxn],ly[maxn],from[maxn],to[maxn]; bool s[maxn],t[maxn]; bool find(int x) { s[x]=1; for(int i=1;i<=m;i++) if(lx[x]+ly[i]==w[x][i]&&!t[i]) { t[i]=1; if(!from[i]||find(from[i])) { from[i]=x; to[x]=i; return 1; } } return 0; } void update() { int d=inf; for(int i=1;i<=n;i++) if(s[i]) for(int j=1;j<=m;j++) if(!t[j]) d=min(d,lx[i]+ly[j]-w[i][j]); for(int i=1;i<=n;i++) if(s[i]) lx[i]-=d; for(int j=1;j<=m;j++) if(t[j]) ly[j]+=d; } void km() { for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) lx[i]=max(lx[i],w[i][j]); for(int i=1;i<=n;i++) for(;;) { memset(s,0,sizeof(s)); memset(t,0,sizeof(t)); if(find(i)) break; else update(); } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&w[i][j]); km(); int ans=0; for(int i=1;i<=n;i++) ans+=w[i][to[i]]; printf("%d",ans); return 0; }
相关文章推荐
- 1028 花店橱窗布置 (带权二分图的最大匹配)
- wikioi 1028 花店橱窗布置 最大权匹配
- 【最大费用流】花店橱窗布置 wikioi1028
- 二分图的最大匹配、完美匹配和匈牙利算法
- HDOJ 题目2189 Swap(二分图最大匹配,输出路径)
- UOJ #80. 二分图最大权匹配
- POJ 1325 Machine Schedule (最小点覆盖 && 二分图最大匹配)
- [省选前题目整理][BZOJ 3140][HNOI 2013]消毒(二分图最大匹配)
- [转]二分图最大匹配总结
- The Accomodation of Students---hdu2444(二分图,最大匹配)
- CJOJ 1943 【重庆八中模拟赛】寻找代表元(二分图最大匹配)
- hdu 4619 Warm up 2(二分图最大匹配)
- hdoj 5090 Game with Pearls 【二分图最大匹配】
- HDU 5090--Game with Pearls【二分图最大匹配】
- POJ 3041 Asteroids 二分图最大匹配
- [二分图最大匹配] number 数论 + 匈牙利算法
- poj2239 Selecting Courses --- 二分图最大匹配
- POJ 1469 COURSES【匈牙利算法入门 二分图的最大匹配 模板题】
- 二分图的最大匹配
- hihocoder 1122 : 二分图二•二分图最大匹配之匈牙利算法