题目:给店员安排工作

请添加图片描述
分配任务这类题,一般可以考虑下用DFS来做。

我的答案:

#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e5 + 5;
int diff[N];    //第x项工作难度
int income[N];  //第x项工作收入
int worker[N];  //第i个人最大承受度

int num_N;  //工作数量
int num_W;  //工人数量

int ans = 0;

void dfs(int i, int val) {    //第i个人
    //cout << i << " " << val << endl;
    if (i == num_W) {
        ans = max(ans, val);
        return;
    }
    //不做
    dfs(i + 1, val);
    //做
    for (int j = 0; j < num_N; j++) {   //第j项工作
        if (diff[j] <= worker[i]) {
            worker[i] -= diff[j];
            dfs(i + 1, val + income[j]);
            worker[i] += diff[j];
        }
    }
}


int main() {
    int tmp;
    char c;
    int n = 0;
    while(scanf("%d%c", &diff[n++], &c)) {if (c == '\n')break;}
    num_N = n;
    //cout << "num_N=" << num_N << endl;
    n = 0;
    while(scanf("%d%c", &income[n++], &c), c == ',') {if (c == '\n')break;}
    n = 0;
    while(scanf("%d%c", &worker[n++], &c), c == ',') {if (c == '\n')break;}
    num_W = n;
    //cout << "num_W=" << num_W << endl;

    dfs(0, 0);
    cout << ans << endl;
	return 0;
}

/*
Input:

2,4,6,8,10
10,20,30,40,30
4,5,6,7

Output:
100
*/








Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐