Задать вопрос
14 сентября, 07:09

Дети в детском саду получили большой мешок с конфетами. Их в мешке М штук. Решено, что конфеты должны быть распределены среди N детей. Каждый ребенок указал количество конфет, которое он хочет. Если ребенку не достанется такого количество конфет, которое он хочет, он будет обижен. "Гнев" будет равным квадрату количества желаемых, но не полученных конфет. Например, если Вася утверждает, что хочет 32 конфеты, но получает лишь 29, ему не хватает 3 конфет, поэтому его "гнев" будет равным 9. Помогите распределить конфеты так, чтобы сумма детского гнева была минимальной. Напишите алгоритм.

+5
Ответы (1)
  1. 14 сентября, 09:29
    0
    Решил жадным алгоритмом

    #include

    using namespace std;

    int ans, n, a[10101], m, b[10101];

    main () {

    cin >>n >>m;

    for (int i = 1; i < = n; i++)

    cin >>a[i];

    sort (a + 1, a + n + 1) ;

    for (int i = 1; i < = n; i++)

    if (a[i] < = m) m-=a[i];

    else

    b[i] = pow (a[i] - m, 2) ;

    for (int i = 1; i < = n; i++)

    if (b[i]) ans+=b[i];

    cout <
    }
Знаете ответ на вопрос?
Не уверены в ответе?
Правильный ответ на вопрос 👍 «Дети в детском саду получили большой мешок с конфетами. Их в мешке М штук. Решено, что конфеты должны быть распределены среди N детей. ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы