hdu1498

来源:互联网 发布:高清网络硬盘播放器 编辑:程序博客网 时间:2024/05/22 16:45

这题就是用匈牙利算法算出每个气球需要几次才能打爆完,如果小于K次就可以打爆,代码如下;

<pre name="code" class="cpp">#include<stdio.h>#include<string.h>int n,k,map[1010][1010],match[1010],ck[1010];int search(int a,int x){int i;for(i=1;i<=n;i++){if(map[x][i]==a&&!ck[i]){ck[i]=1;if(match[i]==0||search(a,match[i])){match[i]=x;return 1;}}}return 0;}int hungary(int a){int i,sum;sum=0;memset(match,0,sizeof(match));for(i=1;i<=n;i++){memset(ck,0,sizeof(ck));if(search(a,i))sum++;}return sum;}int main(){int i,j,a[51],s[51];while(scanf("%d%d",&n,&k),n||k){memset(s,0,sizeof(s));for(i=1;i<=n;i++)for(j=1;j<=n;j++){scanf("%d",&map[i][j]);s[map[i][j]]++;}memset(a,0,sizeof(a));for(j=0,i=1;i<=50;i++){if(k<hungary(i)){a[j]=i;j++;}}if(j==0)printf("-1\n");else{for(i=0;i<j-1;i++)printf("%d ",a[i]);printf("%d\n",a[j-1]);}}return 0;}




0 0
原创粉丝点击