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...