Помогите с задачей для курсовой работы, пожалуйста! Это очень важно. НА С++ ИЛИ С! Мальчик Антон решает вступительную работу в летний математический лагерь. В ней N заданий, которые можно выполнять в произвольном порядке. Разны...

Помогите с задачей для курсовой работы, пожалуйста! Это очень важно. НА С++ ИЛИ С! Мальчик Антон решает вступительную работу в летний математический лагерь. В ней N заданий, которые можно выполнять в произвольном порядке. Разные задачи требуют разного времени для решения. При этом известно, что если задание с номером i выполнять j-м по счету, Антону потребуется Ti*j времени: чем больше думаешь, тем больше устаешь. Например, если начать с первой задачи, а затем выполнить вторую, то потребуется T1*1 + T2*2 времени, а если выполнить сначала вторую задачу, а затем первую – то T2*1 + T1*2. Подскажите Антону, в каком порядке нужно решать задачи, чтобы на выполнение всей работы ушло как можно меньше времени. Входные данные В первой строке вводится число N, во второй строке —N чисел через пробелT1, T2, …, TN, разделенные пробелами. Все числа целые и удовлетворяют следующим ограничениям: 0 < N ≤ 10, 0 < Ti ≤ 100. Выходные данные Требуется вывести сначала минимальное время, за которое можно решить все задачи, а затем – номера задач в том порядке, в котором их нужно решать, чтобы уложиться в это время. Все числа разделяются пробелами. Если решений несколько, нужно выдать любое из них.
Гость
Ответ(ы) на вопрос:
Гость
Отсортируйте массив по не возрастанию (вместе с индексами) и подсчитайте сумму  s = s+b[i]*(i+1) - индексы от нуля. Это и будет наименьшее время. #include #include using namespace std; int main() {    int n,i,s;    bool priz=true;    cin>>n;    int b[n],c[n];    for (int i=0; i>b[i];        c[i]=i+1;    }   // сортировка масcива по не возрастанию    while (priz)    {      priz=false;      for (int i=0; i
Не нашли ответ?
Ответить на вопрос
Похожие вопросы