zoukankan      html  css  js  c++  java
  • 1084:XX开公司<回溯>

    2020年,xx开了一家拥有N个员工的大公司。每天,xx都要分配N项工作给他的员工,但是,由于能力的不同,每个人对处理相同工作所需要的时间有快有慢。众所周知,xx是一个非常重视效率的人,他想知道该如何分配工作,才能使得完成所有工作的时间总和最小(每个员工只可以被分配到一个工作)。但是我们也都知道xx不是一般的懒,所以xx找到了你,请你拯救一下xx吧!
    有多组测试数据。(不超过50组)
    对于每组测试数据:
    第一行输入一个整数N,代表有N员工,员工编号从1到N。(1 <= N <= 10,N >= 8的数据只有3组) 
    接着输入一个N*N的二维矩阵task[N][N],task[i][j]指的是第i项工作如果由j号员工完成所需要的时间。(0 <= task[i][j] <= 1000)
    输出结果包括一个整数,代表所需要的最少时间(求和)。
    6
    10 11 12 11 9 11
    11 9 10 13 11 12
    12 10 11 10 13 9
    9 14 9 10 10 11
    10 10 9 11 12 11
    10 7 10 10 10 8
    
    54
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,cost=0;
    int x[100],c[100][100];
    void work(int i,int count){
        if(i>n&&count<cost){
            cost=count;
            return ;
        }
        if(count<cost)
            for(int j=1;j<=n;j++)
                if(x[j]==0){
                    x[j]=1;
                    work(i+1,count+c[i][j]);
                    x[j]=0;
                }
    }
    int main ()
    {
        while(~scanf("%d",&n)){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++)
                    scanf("%d",&c[i][j]);
                x[i]=0;
                cost+=c[i][i];
            }
            work(1,0);
            printf("%d
    ",cost);
        }
        return 0;
    }

    想的太多,做的太少。
  • 相关阅读:
    POJ 1981 最大点覆盖问题(极角排序)
    POJ 1286 Pólya定理
    POJ 1830 高斯消元
    HDU 3364 高斯消元
    Educational Codeforces Round 42D. Merge Equals(STL)
    ZOJ 3955:Saddle Point(思维)
    POJ 3301:Texas Trip(计算几何+三分)
    SCUT 125 :笔芯回文(DP)
    ZOJ 3953:Intervals(优先队列+思维)
    Codeforces Gym101097I:Sticks (思维)
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115675.html
Copyright © 2011-2022 走看看