本文主要是介绍纪念品分组pascal程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
从大到小排序,如果a[i]+a[j]没超过限制,就可以加tj,否则i就指向下一个。
-
var w,n,i,j,tj:longint; a:array[0..30000]of longint; procedure kp(l,r:longint); var i,j,mid:longint; beginif l>=r then exit;i:=l;j:=r;mid:=a[(l+r)div 2];repeatwhile a[i]>mid do inc(i);while a[j]<mid do dec(j);if i<=j thenbegina[0]:=a[i];a[i]:=a[j];a[j]:=a[0];inc(i);dec(j);end;until(i>j);kp(l,j);kp(i,r); end; beginreadln(w);readln(n);for i:=1 to n doreadln(a[i]);kp(1,n);//快排,从大到小i:=1;j:=n;tj:=0;//repeatif (a[i]+a[j])<=w then//前面加后面的结果小于等于wbegininc(tj);//分组加一inc(i);//指向下一个dec(j);//指向前一个end elsebegininc(tj);//不是也分组加一inc(i);//i指向下一个end;until(i>j);write(tj); end.
这篇关于纪念品分组pascal程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!