vijos p1097(合并果子)
2012-10-05 19:30
190 查看
向总今天中午跟我们说要做合并果子,用堆来做,堆是前几天才学的,还没怎么熟悉。
程序的大概思路是用 贪心+堆结构,不知道快排能否过,现在还没试。
每次取出一个最小值,筛一次,维护堆(每次都加了一个maxlongint,防止越界的情况,想向各位大牛们请教更好的方法。);
两个最小值相加,既是该次所耗体力,再把它放入堆中。
代码...............
以后还要加油啊!!!
程序的大概思路是用 贪心+堆结构,不知道快排能否过,现在还没试。
每次取出一个最小值,筛一次,维护堆(每次都加了一个maxlongint,防止越界的情况,想向各位大牛们请教更好的方法。);
两个最小值相加,既是该次所耗体力,再把它放入堆中。
代码...............
program P1097; var s,n,i,j,k,u,x,y:longint; a:array[1..10001] of longint; procedure shai(m,n:longint); var i,j,t:longint; begin i:=m; j:=2*m; while (j<=n) do begin if a[j]>a[j+1] then inc(j); if a[i]>a[j] then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end; i:=j; j:=2*i; end; end; {=========================================} begin readln(n); for i:=1 to n do read(a[i]); a[n+1]:=maxlongint; for i:=n div 2 downto 1 do shai(i,n); s:=0;u:=0; repeat s:=s+a[1]; x:=a[1]; a[1]:=a ; a :=maxlongint; dec(n); shai(1,n); s:=s+a[1]; x:=x+a[1]; a[1]:=x; shai(i,n); until n<=1; write(s); end.
以后还要加油啊!!!
相关文章推荐
- 合并果子~p1097 vijos
- Vijos P1097 合并果子(优先队列 贪心)
- Vijos P1097 合并果子【哈夫曼树+优先队列】
- Vijos-P1097-合并果子(简单贪心 && 优先队列 && c++)
- 合并果子(Vijos P1097)
- 合并果子_tyvj1066_vijos1097_codevs1063_贪心+堆
- Vijos 1097题:合并果子
- 【vijos】【优先队列】合并果子
- P1097合并果子解题报告
- P1097 合并果子
- Vijos 1097 合并果子
- NOIP2004Day1P2合并果子
- 合并果子
- Tyvj 1066 合并果子
- 树-堆结构练习——合并果子之哈夫曼树
- 合并果子(multiset)
- CSU 1588 合并果子(优先队列)
- 树-堆结构练习——合并果子之哈夫曼树
- 树-堆结构练习——合并果子之哈夫曼树
- 优先队列——合并果子