• Помогите с задачей для курсовой работы, пожалуйста! Это очень важно.
    НА С++ ИЛИ С!
    Мальчик Антон решает вступительную работу в летний математический лагерь. В ней N заданий, которые можно выполнять в произвольном порядке. Разные задачи требуют разного времени для решения. При этом известно, что если задание с номером i выполнять j-м по счету, Антону потребуется Ti*j времени: чем больше думаешь, тем больше устаешь. Например, если начать с первой задачи, а затем выполнить вторую, то потребуется T1*1 + T2*2 времени, а если выполнить сначала вторую задачу, а затем первую – то T2*1 + T1*2. Подскажите Антону, в каком порядке нужно решать задачи, чтобы на выполнение всей работы ушло как можно меньше времени.

    Входные данные
    В первой строке вводится число N, во второй строке —N чисел через пробелT1, T2, …, TN, разделенные пробелами. Все числа целые и удовлетворяют следующим ограничениям: 0 < N ≤ 10, 0 < Ti ≤ 100.

    Выходные данные
    Требуется вывести сначала минимальное время, за которое можно решить все задачи, а затем – номера задач в том порядке, в котором их нужно решать, чтобы уложиться в это время. Все числа разделяются пробелами. Если решений несколько, нужно выдать любое из них.

Ответы 1

  • Отсортируйте массив по не возрастанию (вместе с индексами) и подсчитайте сумму  s = s+b[i]*(i+1) - индексы от нуля.Это и будет наименьшее время.#include <iostream>#include <cstdlib>using namespace std;int main() {   int n,i,s;    bool priz=true;   cin>>n;   int b[n],c[n];   for (int i=0; i<n; i++)   {         cin>>b[i];       c[i]=i+1;   }   // сортировка масcива по не возрастанию   while (priz)   {     priz=false;     for (int i=0; i<n-1; i++)     {       if (b[i]<b[i+1])       {         swap(b[i],b[i+1]);         swap(c[i],c[i+1]);                        priz=true;       }      }     }   s=0;   for (int i=0; i<n; i++)  s+=b[i]*(i+1);   cout<<s<<endl;   for (int i=0; i<n; i++)  cout<<c[i]<<" ";   cout<<endl;   system("pause");   return(0);}Ввод - вывод:610 21 13 36 41 93325 4 2 3 1 6
    • Автор:

      milo58
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years