打工小队

【问题描述】

  路取经辛苦,难免偶遇“黑店" ,这不,由于八戒的粗心大意,师徒四人在一家旅店欠下“巨款”, 白纸黑字竟写得明明白白。唐僧只好组织徒弟们, 给黑店老板当起了小工。旅店有很多的工作, 比如刷碗,做饭,洗衣服,扫地,收拾房间等等。每一项工作的工资都不相同,而且老板规定同一个工作,只能由不同的人来做, 并且工资也不一样,比如上菜,有齐天大圣名头的猴哥来做, 就要比八戒的工资高一些。黑店老板给出了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;
} 
 
复制代码

 

posted @   Hi,小董先生  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-08-01 turtle画太阳
2021-08-01 单词频率
点击右上角即可分享
微信分享提示