Viaje en canoa (codicioso)

Para un viaje en canoa, se pueden alquilar canoas en el puerto, y no hay diferencia entre ellas. Una canoa solo puede llevar dos personas como máximo, y el peso total de los pasajeros no puede exceder la capacidad máxima de la canoa. Queremos minimizar el costo de este evento, por lo que debemos encontrar el número mínimo de canoas que puedan acomodar a todos los pasajeros. Ahora por favor escriba un programa que lea la capacidad máxima de la canoa, el número de pasajeros y el peso de cada pasajero. De acuerdo con las reglas dadas, calcule el número mínimo de canoas necesarias para acomodar a todos los pasajeros y emita el resultado.
Ingrese
Ingrese s en la primera línea, indicando el número de grupos de datos de prueba;
la primera línea de cada grupo de datos incluye dos números enteros w, n, 80 <= w <= 200,1 <= n <= 300, w es una canoa La capacidad máxima de carga de, n es el número de personas; el
siguiente conjunto de datos es el peso de cada persona (no mayor que la capacidad de carga del barco);

Salida
del número mínimo de canoas requeridas por cada grupo de personas.

Entrada de muestra
3
85 6
5 84 85 80 84 83
90 3
90 45 60100
5
50 50 90 40 60
Salida de muestra
5
3
3
Ideas:
1. Ordene primero.
2. Compare la suma del extremo izquierdo y del extremo derecho con el peso máximo.
Si Si se cumplen las condiciones, los más a la izquierda y a la derecha están fuera, es decir, L ++, R—, y el contador cnt ++.
Si no se cumplen las condiciones, significa que solo uno puede salir. Luego, deje que la persona en el tablero más a la derecha (codicioso) (después de clasificar de pequeño a grande, El más grande está a la derecha), solo deje R–, y el contador cnt ++;
cuando L == R, rompa el ciclo, el
código cnt ++ es el siguiente:

#include <iostream>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef long long ll;

int main()
{
    
    
    ios::sync_with_stdio(false);
    int s;
    cin >> s;
    while (s--)
    {
    
    
        int w, n;
        cin >> w >> n;
        int a[310];
        for (int i = 1; i <= n; i++) {
    
    
            cin >> a[i];
        }
        sort(a + 1, a + 1 + n);
        int cnt = 0;
        int l = 1, r = n ;
        while (l <= r)
        {
    
    
            if (a[l] + a[r] <= w) {
    
    
                cnt++;
                l++;
                r--;
            }
            else
            {
    
    
                cnt++;
                r--;
            }
        }
        cout << cnt << endl;
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/wenchlove/article/details/111790085
Recomendado
Clasificación