Red de conocimiento informático - Conocimiento sistemático - Problema del algoritmo codicioso (Pascal)

Problema del algoritmo codicioso (Pascal)

Problema de mochila

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>

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

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>

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.