hdu 2282
来源:互联网 发布:淘宝新款女装 编辑:程序博客网 时间:2024/06/05 21:04
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2282
将题目的问题转化成 以每个盒子里多余的巧克力,到空盒子的最优匹配问题。
下面是AC代码:
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;const int maxn = 505;const int INF = (1<<30)-1;int g[maxn][maxn];int lx[maxn],ly[maxn];int match[maxn];bool visx[maxn],visy[maxn];int slack[maxn];int a[maxn];int n,m,rn;bool dfs(int cur){ visx[cur] = true; for(int y=1;y<=rn;y++){ if(visy[y]) continue; int t=lx[cur]+ly[y]-g[cur][y]; if(t==0){ visy[y] = true; if(match[y]==-1||dfs(match[y])){ match[y] = cur; return true; } } else if(slack[y]>t){ slack[y]=t; } } return false;}int KM(){ memset(match,-1,sizeof(match)); memset(ly,0,sizeof(ly)); for(int i=1 ;i<=m;i++){ lx[i]=-INF; for(int j=1;j<=rn;j++) if(g[i][j]>lx[i]) lx[i]=g[i][j]; } for(int x=1;x<=m;x++){ for(int i=1;i<=rn;i++) slack[i]=INF; while(true){ memset(visx,false,sizeof(visx)); memset(visy,false,sizeof(visy)); if(dfs(x)) break; int d=INF; for(int i=1;i<=rn;i++){ if(!visy[i]&&d>slack[i]) d=slack[i]; } for(int i=1;i<=m;i++){ if(visx[i]) lx[i]-=d; } for(int i=1;i<=rn;i++){ if(visy[i]) ly[i]+=d; else slack[i]-=d; } } } int result = 0; for(int i = 1; i <= rn; i++){ if(match[i]>-1){ result += g[match[i]][i]; } } return result;}int abs(int x){ if(x<0)return -x; return x;}int main(){ int index[maxn]; while(scanf("%d",&n)!=EOF){ //while(scanf("%d",&n)!=EOF,n).这样一直超时。 if(n==0) break; for(int i=1;i<=n;i++) scanf("%d",&a[i]); int i,j,k; m=0; rn=0; for(int i=1;i<=n;i++) if(!a[i]){ index[++rn]=i; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=0; for( i=1;i<=n;i++){ if(a[i]>1){ for( k=1;k<a[i];k++){ m++; for(j=1;j<=rn;j++) g[m][j]=-min(abs(index[j]-i),n-abs(index[j]-i)); } } } int ans=-KM(); printf("%d\n",ans); } return 0;}
- hdu 2282
- HDU 2282
- hdu 2282
- HDU 2282 Chocolate(KM)
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- 正确设置php-fpm和nginx防止网站被黑
- 求多边形的重心-hdu 1115
- /var/log目录下的20个Linux日志文件功能详解
- google开放的maps api接口
- Linux的工作环境-文件系统目录说明
- hdu 2282
- Excel 中 添加 复选框。
- Redis关键点(内存存储总体结构)
- YUM安装nginx,mysql,php-fpm,redis
- php 中cookie学习 Warning: Cannot modify header information - headers already sent by错误
- The Acts of the Mind
- iphone中libiconv库的作用
- 关于多线程渲染
- 2011年下半年项目“银行储蓄综合业务平台”C语言版