zoukankan      html  css  js  c++  java
  • 1776工作分配问题(搜索+剪枝)

    Description

    设有n件工作分配给n个人。将工作i分配给第j个人所需的费用为 cij。试设计一个算法,为每一个人都分配1 件不同的工作,并使总费用达到最小。
    设计一个算法,对于给定的工作费用,计算最佳工作分配方案,使总费用达到最小。

    Input

    输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的n行,每行n个数,表示工作费用。

    Output

    将计算出的最小总费用输出。

    Sample

    Input 

    3
    10 2 3
    2 3 4
    3 4 5

    Output 

    9
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <string.h>
     4 #include <string>
     5 #include <map>
     6 
     7 #define inf 0x3f3f3f3f
     8 
     9 using namespace std;
    10 
    11 int a[25][25], book[25];
    12 int minn;
    13 
    14 void dfs(int cur, int sum, int n)
    15 {
    16     if(sum >= minn) return;
    17     else if(cur==n) minn = min(minn, sum);
    18     else
    19     {
    20         int i;
    21         for(i=0;i<n;i++)
    22         {
    23             if(book[i]==0)
    24             {
    25                 book[i] = 1;
    26                 dfs(cur+1, sum+a[cur][i], n);
    27                 book[i] = 0;
    28             }
    29         }
    30     }
    31 }
    32 
    33 int main()
    34 {
    35     int n, i, j;
    36     cin >> n;
    37     for(i=0;i<n;i++)
    38     {
    39         for(j=0;j<n;j++)
    40         {
    41             cin >> a[i][j];
    42         }
    43     }
    44     minn = inf;
    45     dfs(0, 0, n);
    46     cout << minn << endl;
    47     return 0;
    48 }
  • 相关阅读:
    科普园地
    专家段 错误 新闻
    16进制转rgb
    图片截取0825
    域名的问题 图片显示不出来
    height cell0809
    添加银行卡
    DeviceDelegateHelper.m
    UUID
    MBProgressHUD 动画
  • 原文地址:https://www.cnblogs.com/0xiaoyu/p/14100587.html
Copyright © 2011-2022 走看看