pascal装箱问题

原问题:pascal装箱问题
分类:编程开发 > 最后更新时间:【2017-06-22 22:00:32】

最佳答案

var
ans,k,n,i,j:longint;
t,f:boolean;
a,b:array[1..3000]of longint;procedure dg(l,r:longint);var
max,j,i:longint;begin
max:=a[(l+r) div 2+1];
i:=l;
j:=r; repeat
while a[i]<max do
begin
inc(i); end; while a[j]>max do
begin
dec(j); end; if i<=j then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
inc(i);
dec(j); end; until (i>j); if j>l then
dg(l,j); if i<r then
dg(i,r);end;begin
assign(input,'pack.in');reset(input);
assign(output,'pack.out');rewrite(output);
readln(n); for i:=1 to n do
read(a[i]);
b:=a; for i:=(n div 2) downto 0 do
begin
a:=b;
dg(1,i);
dg(i+1,i*2);
t:=true;
f:=false; for j:=1 to i do
begin
if a[j]>=a[j+i] then
begin
t:=false;
break; end; end; if t=true then
begin
writeln(i);
f:=true;
break; end; end; if f=false then
writeln('0');
close(input);close(output);
end.

最佳答案由网友    提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
20

分享到:

其他回答

其它网友回答:
装箱问题?不明白。

其它网友回答:
你想干什么啊

其它网友回答:
完全读不懂,是不是逻辑问题

不是用贪心法写的。
应该用DP。
program ex1;
var
s:array[0..20000]of 0..1;
sv,v,n,i,j:integer;
begin
readln(sv);
readln(n);
s[0]:=1;
for i:=1 to n do begin
readln(v);
for j:=sv-v downto 0 do
if s[j]=1 then s[j+v]:=1;
end;
for i:=sv downto 0 do
if s[i]=1 then begin
writeln(sv-i);
exit;
end;
    推荐