2017 8 15 提高B組模擬總結

2021-08-06 06:36:33 字數 3767 閱讀 6000

alice要搭建平台,平台不能漂在空氣中,必須要有兩根柱子支撐,具體地說,每個平台的兩端必須由一根柱子支撐,柱子的另一端在地板或另乙個平台上。

給你平台的放置位置(如下左圖所示),每個平台的位置由它的高度(離地面的垂直距離)和水平方向兩個端點的座標決定,每根柱子必須安放在離端點0.5個單位的位置,如下右圖所示。

程式設計計算所需柱子總長是多少。

第一行包含整數n,1<=n<=100,表示平台的數量。

接下來n行,每行三個數y,x1和x2用來描述每個平台的位置,y表示高度,x1,x2表示兩個端點的x座標,三個數都是正整數,並且小於等於10000,同時滿足x2>x1+1(也就是說平台的長度至少為2)。

輸入保證平台不會重疊。

好吧,小水題一道,但是。。。。我打炸了。。。這件事告訴我,下次要打對拍。。

你拍我拍大家拍,大家拍才是真的a,不拍必死。。。

很簡單,排序後直接列舉即可

procedure

so(i:longint);

var j:longint;

begin

for j:=i-1

downto1do

begin

if (y[j]>x[i])and(x[i]>=x[j])and(bz[i,1]=false) then

begin

bz[i,1]:=true;

ans:=ans-h[j];

end;

if (y[j]>=y[i])and(x[j]and(bz[i,2]=false) then

begin

bz[i,2]:=true;

ans:=ans-h[j];

end;

end;

end;

bz判斷左右支柱是否被節省過,沒被節省過則通過列舉找出它下方的第乙個平台來節省自己的支柱。

遊戲在一行n個方塊中進行,編號為1到n,一開始alice在方塊1中,第一次只能跳到方塊2中,接下來每一次跳躍必須滿足以下兩個限制:

(1) 如果是向前跳(即跳到比現在編號大的方塊),跳躍距離必須比上一次要大1;

(2) 如果是向後跳(即跳到比現在編號小的方塊),跳躍距離必須跟上一次一樣。

例如,第一次跳躍後,alice可以跳回1也可以跳到4。

每進入乙個方塊,alice必須支付一定的費用,alice的目標花最少的錢從方塊1跳到方塊n。程式設計計算最小的花費。

第一行包含乙個整數n(2<=n<=1000),表示方塊的個數。

接下來n行,每行包含乙個不超過500的正整數表示進入該方塊的費用。  

看上去很複雜,實際上你只要把普通的dp多跑幾遍就可以過了,自己去卡時間

當然你也可以用貪心的方法,但是博主比較懶,所以並沒有去想,**我也不貼了,自行解決吧。

注意dp是雙向的,但是多跑幾遍後就沒有後效性了。

alice在餐館裡當服務員,今天是她生日,她請求廚師幫她準備生日晚餐,晚餐由n種原料做成,每道菜所需每種原料的數量是一樣的。

廚房裡有一些原料,但不夠,alice還需要從旁邊的超市中購買一些回來。超市裡什麼原料都有,每種原料都分大包裝和小包裝。alice有m元錢,她想利用這m元錢購買原料使得能做出最多的菜。

第一行包含兩個整數n和m(1<=n<=100,1<=m<=100000),接下來n行,每行包含6個正整數,用來描述這種原料的資訊,具體如下:

(1) x:10<=x<=100,表示一道菜中必須含有這種原料的數量;

(2) y:1<=y<=100,表示這種原料廚房已有的數量;

(3) sm:1<=sm<=100,表示超市裡小包裝中含有這種原料數量;

(4) pm:10<=pm<=100,表示小包裝的**;

(5) sv:1<=sv<=100,表示超市裡大包裝中含有這種原料數量;   

(6) pv:10<=pv<=100,表示大包裝的**;

這又是一道猥猥瑣瑣的二分題,博主本人作為一名蒟蒻,是最討厭二分題的,因為比賽的時候根本就想不到。

二分乙個mid,然後再用貪心的方法算出要做出mid道菜的話,每一種菜還要多少錢才能滿足條件,然後如果代價大於m則將mid縮小,否則反之,最後即可得到最大的符合條件的mid。

l:=0;

r:=m;

now:=(l+r) div

2; while ldo

begin

ans:=0;

for i:=1

to n do

need[i]:=x[i]*now-y[i];

for i:=1

to n do

begin

ans1:=maxlongint;

if need[i] mod sv[i]=0

then s:=0

else s:=1;

for j:=0

to need[i] div sv[i]+s do

begin

if (need[i]-j*sv[i]) mod sm[i]=0

then ss:=0

else ss:=1;

k:=(need[i]-j*sv[i]) div sm[i]+ss;

if need[i]-j*sv[i]<=0

then k:=0;

if ans1>j*pv[i]+k*pm[i] then

ans1:=j*pv[i]+k*pm[i];

end;

ans:=ans+ans1;

end;

if ans<=m then

begin

l:=now+1;

now:=(l+r) div

2; end

else

begin

r:=now;

now:=(l+r) div

2; end;

end;

注意最後當l=r退出後還要再算一次判斷當前mid是否符合條件,如果不符就將mid減1再輸出。

當alice在瀏覽數學書時,看到乙個等式a=s,奇怪的是a和s並不相等。alice發現可以通過在a中新增加號「+」從而使得等式成立。

程式設計計算最少需要插入多少加號使得等式成立。允許每個數有多個前導0。

輸入第一行包含乙個等式形式為a=s。

a和s都是沒有前導0的正整數,並保證不相同。

a最多有1000位。

s<=5000。

輸入保證有解。

我承認,作為一名蒟蒻,看到這題的時候我是一臉懵逼的,果斷放棄了。。。。

數字dp,設f[i,j]表示到第i位,式子a的值為j時要用的最少加號數,最後輸出f[length(a),s]即可

fillchar(f,sizeof(f),127);

f[0,0]:=0;

for i:=1

to n do

for j:=0

to m do

begin

p:=0;

q:=1;

for k:=i downto1do

begin

p:=p+z[k]*q;

q:=q*10;

if (q>10000)then

break;

if z[i]=0

then f[i,j]:=min(f[i,j],f[i-1,j]);

if (j>=p) then f[i,j]:=min(f[i,j],f[k-1,j-p]+1)

else

break;

end;

end;

2019 1 5 NOIP提高組 模擬B組 總結

檢查了則久的第二題,理解了一下第三題,最終還是放棄,交了1。第一題看懂題目但不會打。估分 0 100 0 上廁所激發人類靈智 上完廁所回來發現可以用高精度,但是愉快t tt飛,於是就想到了用分解質因數瞎搞,過掉了最大的點,穩得一匹 估分 100 100 0 實際得分 100 100 10 210 r...

2019 1 18 NOIP提高組 模擬B組 總結

剛看到第一題,自我感覺挺水,先看後面的 發現第二題可做,敲了乙個rmq,過了樣例,但一直被自己的資料hac khack hack 掉第三題想了半天想出來乙個貪心 第四題看了一下題沒做 預計得分 0 10 10 0 20 第二題猛然發現是自己的陣列打反了,改過來後信心滿滿的交了 第一題測了半天發現自己...

2019 1 24 NOIP提高組 模擬B組 總結

t1,靠,原題,一眼切 t2,靠,原題,不會做,想了會,切 t3,一眼樹形揹包,想著想著突然忘了樹形揹包咋打了,打了暴力 預計得分 100 100 50 250 持續頹廢 預計得分 100 100 50 250 實際得分 100 100 50 250 真 預估分 睿智原題 又是原題 樹形揹包 樹形d...