zoukankan      html  css  js  c++  java
  • hdu 2255 奔小康赚大钱

    题目链接

    Code:

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 
     6 const int N=301;
     7 int n;
     8 int grid[N][N];
     9 int expx[N];
    10 int expy[N];
    11 int matH[N];
    12 int matP[N];
    13 int visitedH[N];
    14 int visitedP[N];
    15 int sub;
    16 
    17 bool dfs(int u){
    18     visitedP[u]=1;
    19     for(int i=0;i<n;++i){
    20         if(visitedH[i]) continue;
    21         int diff=expx[u]+expy[i]-grid[u][i];
    22         if(diff==0){
    23             visitedH[i]=1;
    24             if(matP[i]==-1 || dfs(matP[i])){
    25                 matP[i]=u;
    26                 matH[u]=i;
    27                 return true;
    28             }
    29         }else{
    30             sub=min(sub,diff);
    31         }
    32     }
    33     return false;
    34 }
    35 
    36 int KM(){
    37     for(int i=0;i<n;++i){
    38         while(true){
    39             memset(visitedH,0,sizeof(visitedH));
    40             memset(visitedP,0,sizeof(visitedP));
    41             sub=INT_MAX;
    42             if(dfs(i)) break;
    43 
    44             for(int p=0;p<n;++p){
    45                 if(visitedP[p]) expx[p]-=sub;
    46                 if(visitedH[p]) expy[p]+=sub;
    47             }
    48         }
    49     }
    50     int res=0;
    51     for(int i=0;i<n;++i){
    52         int j=matH[i];
    53         res+=grid[i][j];
    54     }
    55     return res;
    56 }
    57 
    58 int main(){
    59     while(scanf("%d",&n)!=EOF){
    60         memset(matH,-1,sizeof(matH));
    61         memset(matP,-1,sizeof(matP));
    62         memset(visitedH,0,sizeof(visitedH));
    63         memset(visitedP,0,sizeof(visitedP));
    64         for(int i=0;i<n;++i){
    65             expx[i]=0;
    66             expy[i]=0;
    67             for(int j=0;j<n;++j){
    68                 scanf("%d", &grid[i][j]);
    69                 expx[i]=max(expx[i],grid[i][j]);
    70             }
    71         }
    72         int res=KM();
    73         printf("%d
    ",res);
    74     }
    75 }
  • 相关阅读:
    插入排序Java实现
    WMI控制IIS(2)
    WMI控制IIS
    C语言中用qsort()快速排序
    list_for_each引起的问题
    c++数组地址
    Valgrind 使用简单说明检查内存泄露
    firefox 在UBUNTU下编译
    内存泄漏检测umdh
    ubuntu GIT 安装与使用
  • 原文地址:https://www.cnblogs.com/FEIIEF/p/12251059.html
Copyright © 2011-2022 走看看