其他分享
首页 > 其他分享> > 打工小队

打工小队

作者:互联网

【问题描述】

  路取经辛苦,难免偶遇“黑店" ,这不,由于八戒的粗心大意,师徒四人在一家旅店欠下“巨款”, 白纸黑字竟写得明明白白。唐僧只好组织徒弟们, 给黑店老板当起了小工。旅店有很多的工作, 比如刷碗,做饭,洗衣服,扫地,收拾房间等等。每一项工作的工资都不相同,而且老板规定同一个工作,只能由不同的人来做, 并且工资也不一样,比如上菜,有齐天大圣名头的猴哥来做, 就要比八戒的工资高一些。黑店老板给出了N份工作,并标出了不同工作,不同人承担的工资。请你帮忙规划一下,怎样排班能够获得更多的工资呢? 输入: N+1行,第一行为N(N<=30 )的值,表示有N份工作待分配(同样有N个人物等待工作安排),后面N行是第N件工作每个人的工作的收入。输出: 一个整数,表示最高收入。

【样例输入】

  5

  13 11 10 4 7

  13 10 10 8 5

   5 9 7 7 4

  15 12 10 11 5

  10 11 8 8 4

【样例输出】

  50

#include<iostream>
using namespace std;
int n;
int a[31][31],b[101]={},maxa=0; 

void dfs(int job, int money){
    for(int i=1; i<=n; i++){
        if(b[i]==0){
            money+=a[job][i];
            b[i]=1;
            if(money>maxa) maxa=money;
            if(job<n){
                dfs(job+1, money);
            }
            // 回溯:
            b[i]=0;
            money-=a[job][i]; 
        }
    }
    return;
}

int main(){
    cin>>n;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=n; j++){
            cin>>a[i][j]; 
        }
    }
    dfs(1,0); // 1表示工作;2表示工钱。 
    cout<<maxa;
    return 0;
} 
 

 

标签:11,10,int,工资,小队,工作,money,打工
来源: https://www.cnblogs.com/dks0313/p/16538727.html