当前位置: 代码迷 >> 综合 >> 2020顺丰笔试 服务器管理
  详细解决方案

2020顺丰笔试 服务器管理

热度:87   发布时间:2024-02-13 04:11:26.0

服务器管理
小A的购买了一批服务器,他准备将这些服务器租用出去。每一个服务器有一个固定的带宽,人们根据自己需要的带宽来租用这些服务器。一台服务器只能租给一个人。

小A现在有n个空闲的服务器,第 i 个服务器拥有ai的带宽。有m个客户来租服务器,第 i 位客户需要带宽至少为bi的服务器,并且愿意花ci元作为预算。(服务器带宽独立不可叠加,若不能成功租出则输出0) 小A可以选择拒绝一些人,现在,小A想知道自己的服务器最多能租多少钱?

输入描述
输入第一行包含两个数n,m

接下来1行n个数,第i个数ai代表第 i 个服务器的带宽大小。

接下来m行,每行两个数bi,ci,代表客户需求的带宽大小和他的预算。

n,m≤1000 , 1≤ai,bi,ci≤1000

输出描述
输出一个数,即小A最多能租多少元的服务器出去。


样例输入
3 4
1 2 3
2 1
3 2
3 3
1 1
样例输出
5

提示
样例解释
1号服务器租给4号客户
2号服务器租给1号客户
3号服务器租给3号客户

【代码】100%

import java.util.Arrays;
import java.util.Scanner;public class 顺丰_2 {static class Node implements Comparable<Node>{public int band;public int price;public Node(int band,int price) {this.band=band;this.price=price;}@Overridepublic int compareTo(Node o) {// TODO Auto-generated method stubreturn o.price-this.price;}}static int n,m;static Node[]nodes;static int[]bands;static int maxValue;public static void main(String[] args) {Scanner in=new Scanner(System.in);while(in.hasNextInt()) {n=in.nextInt();m=in.nextInt();bands=new int[n];for(int i=0;i<n;i++) {bands[i]=in.nextInt();}nodes=new Node[m];for(int i=0;i<m;i++) {nodes[i]=new Node(in.nextInt(), in.nextInt());}solve();}}static void solve() {Arrays.parallelSort(bands);Arrays.parallelSort(nodes);for(int i=0;i<m;i++) {for(int j=0;j<n;j++) {if(bands[j]>=nodes[i].band) {maxValue+=nodes[i].price;bands[j]=0;break;}}}System.out.println(maxValue);}
}

【题目2】

赏金猎人
* 题目描述:
克里森是一名赏金猎人,他平时需要完成一些任务赚钱。
最近他收到了一批任务,但是受到时间的限制,他只能完成其中一部分。
具体来说就是有n个任务,每个任务用l, r, w来表示任务开始的时间l,结束的时间r和完成任务获得的金钱。

克里森是个贪心的人,他想知道自己在任务不冲突的情况下最多获得多少金钱。

输入描述
第一行一个数n表示任务的个数。(1≤n≤1e3)

接下来n行每行三个整数l, r, w表示第i个任务的开始时间,结束时间,以及收益。(1≤l≤r≤1e6,1≤w≤1e9)

输出描述
输出一个值表示克里森最多获得的金钱数量。


样例输入
3
1 3 5
2 7 3
5 10 1
样例输出
6

【代码】18%

import java.util.Scanner;public class 顺丰_1_2 {public static void main(String[] args) {int n=1005;Scanner scanner=new Scanner(System.in);int m=scanner.nextInt();int meets[][]=new int [m+1][3];meets[0][0]=meets[0][1]=meets[0][2]=0;for(int i=1;i<m;i++) {meets[i][0]=scanner.nextInt();meets[i][1]=scanner.nextInt();meets[i][2]=scanner.nextInt();}int dp[]=new int[n+1];int M=0;for(int i=1;i<=n;++i) {for(int j=0;j<m;++j) {if(meets[j][1]==i) {dp[i]=Math.max(dp[i-(meets[j][1]-meets[j][0]+1)]+meets[j][2], dp[i]);M=Math.max(M, dp[i]);}else {dp[i]=Math.max(dp[i], M);}}}System.out.println(dp[n]);}
}