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