2017滴滴出行面试题 n 张桌子吃饭的最大利润

描述:

有n张桌子,每张桌子都有固定容量,有m批客人来吃饭,每一批客人都有自己的消费金额,规定客人不可以拼桌子,求老板如何安排才能获得最大利润:

样例输入:

3   5           // 分别代表 n 和 m

2  4  2       // 分别代表每张桌子的容量

                               // 下面的 m 行的第一个数字表示人数,第二个表示 消费金额

1        3        

3        5

3        7

5        9

1        10


样例输出:

20


分析   :分别选 第 1,3,   5 批人可满足题意


思路,用动态规划可解决此类问题

下面我就假设 n =3,m=5来分析

每次来一批人的时候,我们就试着把人安排在三桌的某一桌

1.  当人数大于三张桌子的任何一张的容量是,忽略这一批人,因为坐不下啊。。。。。

2.  把人分别安排在三张桌子,看看那种情况下增加的利润值最大,就选择那一桌。比如说第一批人给的钱没第五批人钱多,很明显要被置换掉。比较完后,记录下是哪一张桌子然后把该桌子拥有的利润值更新


实现代码:

package DIDIS;

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		while (in.hasNextInt()) {
			int n=in.nextInt();
			int m=in.nextInt();

			int v[][]=new int[3][n];
		
			for (int i = 0; i < n; i++) {
				v[0][i]=in.nextInt();
			}
			int p[][]=new int[m][2];
			for (int i = 0; i < p.length; i++) {
				p[i][0]=in.nextInt();
				p[i][1]=in.nextInt();
			}
			for (int i = 0; i v[0][j]) {
						continue;
					}

					if (p[i][1]>v[2][j]) {
						add=p[i][1]-v[2][j];

					}

					if (add>increase) {
						increase=add;
						maxIndex=j;
					}

				}
				if (maxIndex!=-1) {
					
					v[2][maxIndex]=p[i][1];
				}

			}
			int res=0;
			for (Integer i : v[2]) {
				res+=i;
			}
			System.out.println(res);

		}
	}

}



测试结果:

2017滴滴出行面试题 n 张桌子吃饭的最大利润_第1张图片


你可能感兴趣的:(数据结构与算法)