首页 > 试题广场 >

服务部署

[编程题]服务部署
  • 热度指数:3368 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
小v是公司的运维工程师,现有一个有关应用程序部署的任务如下:
1、一台服务器的磁盘空间内存是固定的,现在有N个应用程序要部署;
2、每个应用程序所需要的磁盘、内存不同,每个应用程序允许访问的用户数也不同,且同一个应用程序不能在一台服务器上部署多个。
对于一台服务器而言,如何组合部署应用程序能够使得单台服务器允许访问的用户数最多

输入描述:
输入包括三个参数,空格分隔,分别表示服务器的磁盘大小、内存大小,以及应用程序列表;
其中第三个参数即应用程序列表,表述方式为:多个应用程序信息之间用 '#' 分隔,每个应用程序的信息包括 ',' 分隔的部署所需磁盘空间、内存、允许访问的用户量三个数字;比如 50,20,2000 表示部署该应用程序需要50G磁盘空间,20G内存,允许访问的用户数是2000


输出描述:
单台服务器能承载的最大用户数
示例1

输入

15 10 5,1,1000#2,3,3000#5,2,15000#10,4,16000

输出

31000

说明

组合部署服务5,2,15000、10,4,16000  ,可以让单台服务器承载最大用户数31000
第一个用javascript写的人,能过
function solution(disk, mem, apps) {

    // TODO Write your code here
    let a=disk
    let b=mem
    var grid=[]
    let temp=apps
    for(let i=0;i<temp.length;i++){
        let item=temp[i].split(',').map(Number)
        grid.push(item)
    }
    let dp=[]
    for(let i=0;i<=a;i++){
        dp[i]=[]
        for(let j=0;j<=b;j++){
            dp[i][j]=0
        }
    }
    let N=grid.length
    for(let k=0;k<N;k++){
        for(let i=a;i>=grid[k][0];i--){
            for(let j=b;j>=grid[k][1];j--){
                if(i>=grid[k][0] && j>=grid[k][1]){
                    dp[i][j]=Math.max(dp[i][j],dp[i-grid[k][0]][j-grid[k][1]]+grid[k][2])
                }
            }
        }
    }
    return(dp[a][b])
}


发表于 2020-08-28 20:25:57 回复(1)