Домашние задания: Информатика

Срочно Помогите написать программу по задаче (на любом языке программирования)

Мама у Васи работает товароведом на складе. Для экономии площадей складского помещения товар нужно складировать в штабеля. В соответствии с технологической документацией, каждый штабель формируется из коробок, путем установки их друг на друга. На каждой коробке наклеен документ, на котором указана масса коробки целым числом килограммов. Для обеспечения прочности штабеля, вес каждой коробки должен быть не меньше суммарного веса всех находящихся над ней коробок. Такой штабель считается прочным и может быть допущен к эксплуатации. Например, из трёх коробок массой 1, 3 и 5 килограммов можно сформировать прочный штабель: коробку массой 1 кг нужно поставить самой верхней, массой 3 кг — посередине, и, наконец, коробку массой 5 кг — вниз. Вася решил помочь маме и написать программу, определяющую возможность складирования заданного набора коробок в один штабель. Помогите, пожалуйста, Васе написать такую программу.

Формат ввода
В первой строке записано два целых числа: n — количество наборов коробок и k — количество коробок в каждом наборе (1 ≤ n ≤ 20000; 2 ≤ k ≤ 50). В каждой из следующих n строк записаны разделенные пробелом k целых чисел — массы коробок в каждом из n наборов. Любая коробка весит целое число килограммов, не менее 1 кг и не более 109 кг.

Формат вывода
Выходные данные содержат n строк. В i-й строке должно быть записано «YES», если из k коробок i-го набора можно сформировать прочный штабель, и «NO» — в противном случае.
// Штабелит коробки
program Gabdrahmanov;

uses crt;

const
FILE_NAME = 'gabdrahmanov.txt';

var
n, x: word; // n - количество наборов, x - масса коробок над текущей
k: byte; // k - количество коробок в наборе
f: text; // f - хэндлер файла
s: string; // s - строка из файла
a: array[,] of byte; // a - список всех масс коробок в файле по строкам
b: array of byte; // b - список масс коробок в текущей строке
y: boolean; // y - признак возможности формирования штабеля

begin
// Ввод
write('Введите количество наборов коробок N (1-20000): ');
while (n < 1) or (n > 20000) do read(n);
write('Введите количество коробок в наборе K (2-50): ');
while (k < 2) or (k > 50) do read(k);
assign(f, FILE_NAME);
rewrite(f);
writeln(f, n);
writeln(f, k);
randomize;
write('Идёт создание файла с входными данными ', FILE_NAME, '... ');
for var i := 1 to n do begin
for var j := 1 to k do
write(f, random(109)+1, ' ');
writeln(f);
end;
close(f);
writeln('Готово!', #10,
'Для просмотра входных данных откройте файл.', #10,
'Для продолжения нажмите любую клавишу...');
readkey;
// Чтение
reset(f);
readln(f, n);
readln(f, k);
setLength(a, n+1, k+1);
write('Идёт чтение входных данных из файла ', FILE_NAME, '... ');
for var i := 1 to n do begin
readln(f, s);
s += ' ';
for var j := 1 to k do begin
a[i,j] := strToInt(copy(s, 1, pos(' ', s, 1)-1));
delete(s, 1, pos(' ', s, 1));
end;
end;
close(f);
writeln('Готово!', #10, 'Для продолжения нажмите любую клавишу...');
readkey;
// Анализ
rewrite(f);
setLength(b, k);
write('Идёт анализ и запись выходных данных в файл ', FILE_NAME, '... ');
for var i := 1 to n do begin
for var m := 0 to k-1 do
b[m] := a[i,m+1];
sort(b);
reverse(b);
for var j := 0 to k-1-1 do begin
x := 0;
y := true;
for var m := j+1 to k-1 do
x += b[m];
if b[j] < x then begin
y := false;
break;
end;
end;
// Вывод
if y then
write(f, 'YES: ')
else
write(f, 'NO: ');
for var j := 0 to k-1 do
write(f, b[j], ' ');
writeln(f);
end;
writeln('Готово!', #10, 'Для просмотра результата откройте файл.');
close(f);
end.
Гульзира Тукенова
Гульзира Тукенова
18 091
Лучший ответ