会场安排问题java代码

- 问题描述:

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场,设计一个有效的贪心算法进行安排。

- 算法设计:

对于给定的k个待安排的活动,计算使用最少的会场时间表。

- 数据输入:

由文件input.txt给出输入数据。第一行有1个正整数k,表示有k个待安排的活动,接下来的k行中,每行有
2个正整数,分别表示k个待安排的活动的开始时间和结束时间、时间以0点开始用分钟记录。

- 输入文本示例:

5
1 23
12 28
25 35
27 80
36 50
输出示例:3

- 解法一:循环安排(贪心算法)

会场号 初始状态 结束时间
会场1号:0 23-35-50
会场2号:0 28
会场3号:0 80
会场4号:0
会场5号:0

import java.util.Scanner;

public class pj1 {
	
	
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		int num = -1;
		int geshu = 0;
		
		num = input.nextInt();// 输入待安排的活动个数
//		System.out.println("总个数:"+ num);

		int[] s = new int[num];
		int[] f = new int[num];
		for (int i = 0; i < num; i++) {
			s[i] = input.nextInt();
			f[i] = input.nextInt();
		}
//		// 打印刚才输入的值
//		for (int i = 0; i < num; i++) {
//			System.out.print(s[i] + "  ");
//			System.out.println(f[i]);
//		}

		// 按照演出开始时间排序
		for (int i = 0; i < s.length; i++) {
			int temp1 = 0;
			int temp2 = 0;
			for(int j = i+1; j < s.length; j++) {
				if (s[i] > s[j]) {
					temp1 = s[i];
					s[i] = s[j];
					s[j] = temp1;
					temp2 = f[i];
					f[i] = f[j];
					f[j] = temp2;
				}
			}
		}
		
		// 双重循环得到安排的会场
		int[] anpai = new int[num];
		for (int i = 0; i < num; i++) {
			for (int j = 0; j < num; j++) {
				if (anpai[j] < s[i]) {
					anpai[j] = f[i];
					break;
				}
			}
		}
		
		// 遍历安排的数值,找出被安排的个数
		for (int i = 0; i < num; i++) {
			if (anpai[i] != 0) {
				geshu++;
			}
		}
		System.out.println("至少安排的会场个数:"+geshu);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值