笔试:《给店员安排工作》
题目:给店员安排工作分配任务这类题,一般可以考虑下用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
·
题目:给店员安排工作
分配任务这类题,一般可以考虑下用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
*/
更多推荐
已为社区贡献2条内容
所有评论(0)