本文主要是介绍【让所有司机获得总体最多的分配问题】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【题目】
现有司机2N人,调度中心会将所有司机平均分配给A,B两个区域。第i个司机去A可得收入为income[i][0],第i个司机去B可得收入为income[i][1],返回所有调度方案中能使所有司机总收入最高的方案是多少钱?
【思路:暴力解法】
假设6个司机去A B区域
0[9,13] 表示0号司机去A收入9元,去B收入13元;0号司机可去A,也可去B
1[9,13] 司机可去A,也可去B
2[9,13] 司机可去A,也可去B
3[9,13] 司机可去A,也可去B
4[9,13] 司机可去A,也可去B
5[9,13] 司机可去A,也可去B
6[9,13] 司机可去A,也可去B
【代码】
if(income==null || income. length <2 ll (income. length &l)!=0)//如果司机个数为空或者司机是基数个
{return 0;}
int M = income. length >> 1; // M = N / 2 要去A区域的人
return process(income,0,M);
/**********************************************************************/
//income 为总司机数量,index为当前遍历到的下标数,Areat为A区域剩余名额
public static in process(int[] income,int index,int Arest)
{
if(income.length-index==Arest)//如果司机数量-当前司机下标值==A区域剩余名额
{ //说明B区域已经满了,当前司机一定要去A区域income[index][0]
return income[index][0]+process(income,index+1,rest-1);
}
if(Arest==0)//如果A区域已经没有名额了
{ //说明A区域已经满了,当前司机一定要去B区域income[index][1]
return income[index][0]+process(income,index+1,rest-1);
}
//不满足上述两个条件时,当前司机可以去,或者去B
int p1=income[index][0]+process(income,index+1,rest-1);//司机去A
int p2=income[index][1]+process(income,index+1,rest);//司机去B
return Math.max(p1,p2);
}
}
这篇关于【让所有司机获得总体最多的分配问题】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!