1. 程式人生 > >Luogu1090合併果子[單調佇列]

Luogu1090合併果子[單調佇列]

/*
ID:hh826532
PROB:
LANG:C++
*/
#define _FILE_ ""
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<queue>
#include<time.h>
#include<fstream>
#include<string>
#include<set> #include<list> #include<stdlib.h> #define fr(i,a,b) for(int i=a,_end_=b;i<=_end_;i++) #define fd(i,a,b) for(int i=a,_end_=b;i>=_end_;i--) #define frei(s) freopen(s,"r",stdin) #define freo(s) freopen(s,"w",stdout) #define ll long long #define u unsigned using namespace
std; #define rt return #define inf 0x3f3f3f3f #define infll 4557430888798830399ll #define pc(x) putchar(x) #define spc putchar(' ') #define gc getchar() #define ln pc('\n') #define writeint(x) printf("%d",x) #define lowbit(x) (x&(-x)) int readuint(){ int s=0; char c=getchar(); while(c<'0'
||c>'9')c=gc; while(c>=48&&c<='9'){ s=s*10+c-48; c=gc; } rt s; } int readint(){ int s=0,k=1; char c=getchar(); while((c<'0'||c>'9')&&c!='-')c=gc; if(c=='-'){ k=-1; c=gc; } while(c>=48&&c<='9'){ s=s*10+c-48; c=gc; } rt s*k; } void OPENFILE(){ char FILENAME[50]; if(strlen(_FILE_)==0)rt; sprintf(FILENAME,"%s.in",_FILE_); frei(FILENAME); sprintf(FILENAME,"%s.out",_FILE_); freo(FILENAME); } int alen,al,bl,blen,a[100010],b[100010],ans; int main(){ OPENFILE(); alen=readuint(); if(alen<2) { printf("0\n"); rt 0; } fr(i,1,alen) a[i]=readuint(); sort(a+1,a+alen+1); blen=1; al=3; bl=1; a[alen+1]=inf; ans=b[1]=a[1]+a[2]; b[2]=inf; fr(i,1,alen-2) { blen++; b[blen]=0; fr(j,1,2) if(a[al]>b[bl]&&bl!=blen) { b[blen]+=b[bl]; bl++; } else { b[blen]+=a[al]; al++; } ans+=b[blen]; b[blen+1]=inf; } printf("%d\n",ans); rt 0; }

大家可以去codevs做一下
本人題目

相關推薦

Luogu1090合併果子[單調佇列]

/* ID:hh826532 PROB: LANG:C++ */ #define _FILE_ "" #include<iostream> #include<stdio.h> #include<algorithm> #incl

合併果子佇列和優先佇列

有兩種方法 一種是佇列 一種是優先佇列(priority_queue) 這兩種方法的區別是佇列定義時沒有自動排序 所以只能在輸入的時候按順序才能輸出正解(所以佇列的方法不被認為是正解) 下面是程式碼 比較簡便: #include<bits/stdc++.h> using na

堆排 luogu1090合併果子

#include<cstdio>#include<iostream>using namespace std;int ans,s,hp[10005],n,siz,cnt;void pus(int x)//輸(插)入 {cnt++;hp[cnt]=x;int now=cnt;int fa=

單調佇列及其deque寫法 HDU 3415+Poj 4002 (日期處理) + 合併果子

嘗試用deque寫一下單調佇列,發現速度還是可以接受的,STL依賴症越來越嚴重了。。。。 HDU 3415 Max Sum of Max-K-sub-sequence 題意:給出一個有N個數字(-1000..1000,N<=10^5)的環狀序列,讓你求一個和最大的連續

合併果子單調佇列

【問題描述】  在一個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。     每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n-1次合併之後,就只剩下一堆了。

CSU-1588 合併果子(堆/單調佇列

題意 有 nn 堆果子,第 ii 堆果子有 aiai 個,每次合併的代價是兩堆果子個數的總和,求總合並的最小代價。 1≤n≤10001≤n≤1000 思路 堆(優先佇列)的做法已經眾所周知,複雜

洛谷 P1090 合併果子 STL優先佇列

優先佇列 #include<iostream> #include<queue> using namespace std; int n,a[10005]; long long sum; priority_queue<int,vector<int>,greater

NOIP2004合併果子(提高組T2)————優先佇列STL,貪心

題解:本題主要考查優先佇列STL,貪心。若要體力最小,就要將最小的果合併,合併後的果子再入隊。 程式碼如下: #include<iostream> #include<queue> using namespace std; priority_queue<in

luogu1090(堆,排序,貪心)合併果子

每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n-1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗體力之和。 例如

【貪心】CODE[VS] 1063 NOIP2004普及組-合併果子 (刷題記錄(模擬+優先佇列))

日常水題 貪心策略:每次找代價最小的兩對合並,用小根堆來維護,每次合併之後將當前合併結果重新推入佇列,直到合併完成(n-1次) 程式碼如下 #include <cstdio>

合併果子(貪心+優先佇列

現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。 Input 第一行包含一個整數T(T<=50),表示資料組數。 每組資料第一行包含一個整數n(2<=n<=1000),表示果子的堆數。 第二行包含n個正整數ai(

NOIP提高組2004 合併果子(優先佇列排序)

從oj上看到一道問題,合併果子,題意如下: 1171.合併果子 Time Limit: 1000 MS Memory Limit: 32768 KB Total Submission(s): 77 Accepted Submission(s):

2018.10.29 bzoj1023: [SHOI2008]cactus仙人掌圖(仙人掌+單調佇列優化dp)

傳送門 求仙人掌的直徑。 感覺不是很難。 分點在環上面和不在環上分類討論。 不在環上直接樹形 d p

P3084 [USACO13OPEN]照片Photo (dp+單調佇列優化)

題目連結:傳送門 題目: 題目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N <= 200,000), which, as always

HDU 3401 Trade(DP + 單調佇列優化)

任重而道遠 Recently, lxhgww is addicted to stock, he finds some regular patterns after a few days' study. He forecasts the next T days' stock market. On

省賽選拔-單調佇列

單調佇列寫法。 Py&hyh想脫單 Description 總所周知,,py和hyh有十分濃烈的脫單意願,但是非常不幸,在一個風和日麗的下午,他們穿越到一個沒有妹子的世界,他必須回答一個問題才能回到本來的世界,這個問題是給出一個nm的矩陣,然後有q次操作,每一個操作,給出xi,y

rqnoj 460單調佇列-1

http://www.rqnoj.cn/Problem_460.html 題意:n個人站成一隊,每兩個人之間如果沒有比一個高的就說明二者能互相看到,問有多少對人能互相看到對方。。 分析:單調佇列,沒的說。。。但是相同高度要特殊處理一下, 這裡我是將連續的相同高度的存到一起並記錄個數。。連續相同高度的

CC April 18 Cutting Plants 單調佇列+思維

題意:長度為n的序列A,B.操作:選定一個區間[L,R]將裡面的數變為h , h<=min(a[L],a[L+1]...a[R]). n<=1e5,1<=a[i],b[i]<=1e9. 問將序列A變為序列B最少需要多少次操作? 無解輸出-1. 假設某次操作是將[L,R]內

HDU 6319 Ascending Rating 單調佇列,(最大值變化次數)

題意:長度為n的序列a.對每個m大小的區間[i,i+m-1],求出該區間的最大值,以及最大值變化的次數. 例如區間(4,2,7,5),最大值變化次數為2. n<=1e7. n<=1e7. 標準解應該為O(n). 容易想到用單調佇列維護每個區間的最大值. 發現正著做單調佇列的過程中,單

單調佇列】【P3957】 跳房子

傳送門 Description 跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。 跳房子的遊戲規則如下: 在地面上確定一個起點,然後在起點右側畫 $n$ 個格子,這些格子都在同一條直線上。每個格子內有一個數字(整數),表示到達這個 格子能得到的分數。玩家第一次從起點開始向右