C++打工小队问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//Author:PanDaoxi
#include <iostream>
using namespace std;
//a=收益
//book=第i个人是否分配了工作
//maxl=最高收入
//n=工作数目 
int a[31][31],book[31],maxl=0,n;
void dfs(int step,int t){
    
     //step=第几份工作 t=收益
	if(step>n){
    
     //分配完毕 
		if(t>maxl) maxl=t; 
		return 0; 
	}
	for(int i=1;i<=n;i++){
    
    
		//判断第i个人是否被分配
		if(book[i]==0){
    
    
			book[i]=1;
			t+=a[step][i];
			dfs(step+1,t);
			//回溯
			t-=a[step][i];
			book[i]=0; 
		} 
	}
}
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);
	cout<<maxl<<endl;
	return 0;
} 

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/PanDaoxi2020/article/details/121191695