Likou 1710. El número máximo de unidades en el camión

1710. Número máximo de unidades en camión

Por favor, ponga algunas cajas en un camión. Darle una matriz bidimensional boxTypes, donde boxTypes [i] = [numberOfBoxesi, numberOfUnitsPerBoxi]:

numberOfBoxesi es el número de cajas de tipo i.
numberOfUnitsPerBoxi es el número de unidades que se pueden cargar en cada caja de tipo i.
El número entero truckSize representa el número máximo de cajas que se pueden cargar en el camión. Siempre que el número de cajas no exceda el tamaño del camión, puede elegir cualquier caja para cargar en el camión.

Devuelve el número total máximo de unidades que puede cargar el camión.

示例 1:

输入:boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
输出:8
解释:箱子的情况如下:
- 1 个第一类的箱子,里面含 3 个单元。
- 2 个第二类的箱子,每个里面含 2 个单元。
- 3 个第三类的箱子,每个里面含 1 个单元。
可以选择第一类和第二类的所有箱子,以及第三类的一个箱子。
单元总数 = (1 * 3) + (2 * 2) + (1 * 1) = 8
示例 2:

输入:boxTypes = [[5,10],[2,5],[4,7],[3,9]], truckSize = 10
输出:91
 

提示:

1 <= boxTypes.length <= 1000
1 <= numberOfBoxesi, numberOfUnitsPerBoxi <= 1000
1 <= truckSize <= 106

respuesta:

Debido a que existe un límite en la cantidad de cajas que se pueden cargar, debemos intentar instalar cajas con tantas unidades como sea posible.
Por lo tanto, usamos la función qsort para ordenar el número de unidades contenidas en una sola caja de cada caja de grande a pequeña, y luego realizamos el ciclo para iniciar la simulación de la operación de "carga". Y en el proceso de "instalación", necesitamos establecer dos variables, el número de cajas de almacenamiento y el número de unidades de cajas de almacenamiento, y luego prestar atención al rango del número de cajas. Es decir, primero veamos si una caja se puede instalar por completo, si se puede instalar directamente, si no se puede instalar una por una, veamos si cruza el límite.

Código:

int*cmp(void*_x,void*_y)
{
    
    
    int*x = *(int**)_x;
    int*y = *(int**)_y;
    return x[1]>y[1]?-1:1;
}
int maximumUnits(int** boxTypes, int boxTypesSize, int* boxTypesColSize, int truckSize){
    
    
    qsort(boxTypes,boxTypesSize,sizeof(int*),cmp);
    int sum = 0;//存箱子
    int res = 0;//存单元
    for(int i=0;i<boxTypesSize;i++)
    {
    
    
        int temp = sum;
        sum+=boxTypes[i][0];
        if(sum>truckSize)
        {
    
    
            sum = temp;
            int temp1;
            while(sum<=truckSize)
            {
    
    
                temp1 = sum;
                sum++;
            }
            return res+(temp1-temp)*boxTypes[i][1];
        }
        res+=boxTypes[i][1]*boxTypes[i][0];
    }
    return res;
}

Supongo que te gusta

Origin blog.csdn.net/xiangguang_fight/article/details/115023999
Recomendado
Clasificación