Problema del algoritmo codicioso (Pascal)
Programa beibao
const
m=150;
n=7;
var
xu:integer;
i,j:integer;
bienes:array:=i;
leer(bienes, bienes );
readln;
ok:=0; ok:=0;
fin;
fin
procedimiento make;
var
bi:array[1...n] of real;
i,j:integer;
temp1,temp2,temp0:integer;
comenzar
for i:=1 to n do
bi[i]:=bienes/ bienes
para i:=1 a n-1 hacer
para j:=i+1 a n hacer
comenzar
if bi; temp1:=bienes; temp2 := bienes;
bienes:=bienes:=bienes; bienes:=bienes;
bienes:=temp0; = temp1; bienes:=temp2;
fin;
fin;
fin;
fin;
comenzar
init;
hacer;
para i:=1 a 7 hacer
comenzar
si los bienes>xu entonces se rompen;
ok:=bienes ok:=1;
xu:=xu-bienes;
fin;
j:=i;
si i<= n entonces
comenzar
ok:=bienes;
ok :=xu/goods;
end;
for i:=1 to j do
writeln(ok:1:0 ,':',ok *goods:2:1);
fin.
Problema del viajero
Programa jiayou
const maxn=10001;< / p>
cero=1e-16;
tipo
jd=record
valor,way,over:real;
fin
var oil:array[1..maxn] of ^jd;
n: entero;
d1,c,d2,cost,maxway: número real ;
función init: booleano;
var i: entero;
comenzar
nuevo(aceite[1]); p>
p>
aceite[1]^.way:=0;
read(d1,c,d2,oil[ 1]^.value,n);
maxway :=d2*c;
para i:=2 a n+1
comenzar
nuevo(aceite[i]) ;
readln(aceite[i]^.way,aceite[i]^.valu
e);
aceite[i]^.over:=0;
fin;
inc(n,2);
nuevo(aceite[n]);
aceite[n]^.way:=d1;
aceite[n]^.over:=0;
para i:=2 to n hacer
si oil[i]^.way-oil[i-1]^.way>maxway entonces
comenzar
init:=false;
salir
end;
init:=true;
end;
procedimiento compra(i:integer;millas:real);
comienzo
costo:=costo+millas/d2*aceite[i]^.valor;
fin;
procedimiento resolver;
var i,j:integer;
s:real;
comenzar
i:=1;j:=i+1;
repetir
s:=0.0;
while( s<= maxway+zero) y (j<=n-1) y (oil[i]^.value<=oil[j]^.value) hacen
comenzar
inc( j);
s:=s+oil[j]^.way-oil[ j-1]^.end;
si s<=maxway+zero entonces p>
if (aceite[i]^.sobre+cero>=aceite[j]^.way-aceite[i]^.=aceite[i]^.over-(aceite[j]^.way- oil[i]^.way) else
comenzar
comprar(i,oil[j]^.way-oil[i]^.way-oil[i]^. over);
oil[j]^.over:=0.0;
end
else start
buy(i,maxway) -aceite[i]^.way-aceite[i]^.way);
j:=i+1;
aceite[j]^.over:=maxway- (aceite[j]^.way-oil[i]^.way);
fin;
i:=j;
hasta i=n ;
fin;
comenzar
costo:=0;
si es inicial, entonces comienza
resolver;
writeln(coste :0:2);
end else writeln('Sin respuesta');
end.
n partes, cada parte debe pasar por dos procesos A y B
Orden de trabajo del programa;
const maxn=100;
type jd=record
a,b,m,o:entero;
fin;
var n,min,i:entero;
c:array[ 1. .maxn] de jd;
orden:matriz[1..maxn] de entero;
procedimiento init;
>var i:integer;
comenzar
readln(n);
para i:=1 a n hacer
leer( c[i].a);
readln;
para i:=1 to n do
read(c[i].b);
readln;
for i:=1 to n do
comenzar
if c[i].a c[i].o:=i; fin; fin; clasificación de procedimiento; var i,j,k,t:integer; temp:jd; comenzar para i:=1 a n-1 hacer comenzar k:= i;t:=c[i].m; para j:=i+1 to n do si c[j].m si k<>i entonces comienza temp:=c[i];c[i]:=c[k];c[k ]:=temp end end; end; orden de reproducción del procedimiento; var i,s,t.integer; comenzar fillchar(orden,tamañode(orden),0); s:=1; t:=n; para i:=1 to n hacer si c[i].m=c[i].a entonces comienza orden[s]:=i;s:=s +1 fin else comienza orden[t]:=i;t:=t-1;end; end; procedimiento calc_t; p> p> var i,t1,t2:integer; begin t1:=0;t2:=0; para i:=1 a n hacer comenzar t1:=t1+c[order[i]].a; si t2 t2:=t2+c[ orden[i]].b; fin; min:=t2; fin ; comenzar inicio; ordenar; orden de reproducción; calc_t; writeln (min); for i:=1 to n do write(c[order[i]].o,''); writeln; end. No tengo tiempo para compensarlo. Puntos de bonificación por cumplir tu promesa.