Задача2
program сокровища;// сортировка 2-х масивов по убыванию 2 олим задача 2012-2013 года
var
A: array [1..4] of integer;
B: array [1..4] of integer;
i, j : integer;
y,X: integer;
begin
writeln ('zapolnenie veca');
for i:=1 to 4 do
begin
read (A[i]);
end;
writeln ('Zapolnenie stoimosti');
for i:=1 to 4 do
begin
read (b[i]);
end;
for i:=1 to 3 do
for j:=i+1 to 4 DO
if a[J] > a[I] then
BEGIN
y:=a[J];
a[j]:=a[i];
a[i]:=y;
end;
for I:=1 to 3 do
for j:=i+1 to 4 do
if B[j]> B [i]then
begin
y:=B[j];
B[j]:=B[i];
B[i]:=y;
end;
for i:=1 to 4 do
begin
X:= X+ A[i]*B[i];// максимальная стоимость
end;
writeln ('Деньги = ',x);
readln ;
readln ;
end.
Задача1
program olim2012_zad1;//мальвина
var
f1,f2 :Text;//файлы
N,c50,c15,c1, ost,ost1,s,s50,s15,s1: integer;
begin
Assign (f1,'input.txt');
Assign (f2,'output.txt');
Reset (f1);
Rewrite (f2);
read (f1,N);
c50 := N div 50;
ost:= N mod 50;
c15 := ost div 10;
c1 := ost mod 10;
s1:= c50*50+c15*15+c1*2;
s50:= (c50+1)*50;
s15:= c50*50+(c15+1)*15;
s:=Min (s1,s50);
s:= Min(s,s15);
Write (f2,s);
Close (f1);
Close (F2);
end.
Задача1
var
f,f1 : text;
S,S1,S2,S3,c,c10,c50,c1,p,M: integer;
begin
Assign (f,'input.txt');
Reset (f);
read (f,c);
close (f);
c50:= c div 50;
P:= c mod 50;
C10:= P div 10;
C1:= P mod 10;
S:=C50*50+C10*15+C1*2;//цветы по
50,15,2
S1:=(C50+1)*50;// когда выгоднее
купить лишние букет по 50
S2:= C50*50+(C10+1)*15;//когда выгоднее
купить лишний букет по 15
if (S<S1) and
(S<S2) then M:=S else
If S1<S2 then M:=S1 else M:=S2;
Assign (f1,'output.txt');
Rewrite (f1);
Write (f1,M);
close (f1);
Задача3
program zad3_2012;
var
N, I,j ,Par : integer;
A,B,C: array [1..100] of integer;
function m (A,B:integer):integer;// функция мин
begin
if A>B then m:=B else M:=A
end;
begin
Assign (input,'input.txt');
Reset (input);
read (N);
for i:=1 to N do
begin
read (A[i]);
end;
for i:=1 to N-1 do
for J:=i+1 to N do
if A[I]>A[j] then begin
Par:=A[j];
A[j]:=A[i];
A[i]:=Par;
end;
for i:=1 to N-1 do
begin
B[i]:=A[I+1]-A[i];//масив длины дорожек
между соседними домами
end;
N:=N-1;
C[1]:=B[1]; // мин раст между
1 и 2 домом
C[2]:=C[1]+B[2];//мин раст между
1,2,3 домом
for I:=3 to N do
C[i]:=m(C[I-1],C[I-2])+B[i];// выбираем самое
короткое растояние и добавляем путь к дому n+1
Writeln;
Assign (output,'output.txt');
Rewrite (output);
Write (C[n]);
Close(input);
Close (output);
end.
Відсортуємо координати будинків за зростанням
(масив координат К). Завжди останній й передостанній будуть з’єднані стежкою,
як і перший з другим(у відсортованому масиві).
Якщо у нас два будинка, то мінімальна довжина
стежки буде дорівнювати D[1]=K[2]-K[1].
Три будинка - D[2] = D[1]+(K[3]-K[2]).
Чотири будинка - D[3] = D[1]+(K[4]-K[3]) (перший з другим і
третій з четвертим).
Якщо п’ять будинків, то з’єднуємо четвертий з
п’ятим (K[5]-K[4]), а серед двох можливих варіантів з’єднань вибираємо менший Min(D[3], D[2]). Отже, для п’яти
D[4] = Min(D[3], D[2])+(K[5]-K[4]). Для чотирьох будинків ця формула теж буде
працювати й запис буде таким: D[3] = Min(D[2], D[1])+(K[4]-K[3]). У загальному
випадку маємо формулу: D[i] = Min(D[i-1], D[i-2])+(K[i+1]-K[i]). Послідовно заповнюємо масив D, використовуючи формулу, й отримаємо правильну
відповідь в D[N-1].
Немає коментарів:
Дописати коментар