題目:[haoi]2012音量調節
描述:音量用乙個整數描述。輸入檔案中給定整數beginlevel,代表吉他剛開始的音量,以及整數maxlevel,代表吉他的最大音量。音量不能小於0也 不能大於maxlevel。輸入檔案中還給定了n個整數c1,c1,...,cn,表示在第i首歌開始之前吉他手想要改變的音量是多少。
吉他手想以最大的音量演奏最後一首歌,你的任務是找到這個最大音量是多少。
第一行依次為三個整數:n, beginlevel, maxlevel。
第二行依次為n個整數:c1,c1,...,cn。
輸出演奏最後一首歌的最大音量。如果吉他手無法避免音量低於0或者高於maxlevel,輸出-1。
輸入
3 5 10
5 3 7
輸出10
輸入4 8 20
15 2 9 10
輸出-1
1≤n≤50,1≤ci≤maxlevel,1≤maxlevel≤1000,0≤beginlevel≤maxlevel 。
閱讀完此題,立刻想到正解:dp。等等,這資料規模有點小啊……50*1000的時間複雜度,完全可以接受,二話不說,上大暴力!兩個陣列滾動著來,尋找前一次可以達到的音量,然後+當前曲子可調節音量,以此類推……但是剛開始沒有看完題目,結果忘了輸出-1,還有就是有一點紕漏,第二次時手抖打錯了乙個變數,結果第一次通過的點都沒過,第一次沒過的都過了………………
ac**:
program zht;vari,j,n,m,p,c:longint;
bh1,bh2:array[-10000..10000] of longint;
begin
assign(input,'changingsounds.in');
assign(output,'changingsounds.out');
reset(input);
rewrite(output);
readln(n,p,m);
for i:=0 to 1000 do
begin
bh1[i]:=maxlongint;
bh2[i]:=maxlongint;
end;
bh1[p]:=0;
for i:=1 to n do
begin
read(c);
for j:=0 to m do
if bh1[j]=i-1 then begin bh2[j+c]:=i; bh2[j-c]:=i end;
for j:=0 to 1000 do
bh1[j]:=bh2[j];
end;
for j:=m downto 0 do
if bh1[j]=n then begin writeln(j); exit; end;
writeln('-1');
close(input);
close(output);
end.
}
HAOI2012 音量調節
音量用乙個整數描述。輸入檔案中整數beginlevel,代表吉他剛開始的音量,整數maxlevel,代表吉他的最大音量。音量不能小於0也不能大於maxlevel。輸入中還給定了n個整數c1,c2,c3,cn,表示在第i首歌開始之前吉他手想要改變的音量是多少。吉他手想以最大的音量演奏最後一首歌,你的任...
HAOI2012 音量調節
嘟嘟嘟 這道題只要狀態一想出來,這題就做完了。另 dp i j 表示 i 首歌音量 j 能否達到,則如果dp i 1 j 1,那麼dp i j c i dp i j c i 1.然後最後從max到0反向遍歷dp n i 即可。注意這題陣列要開2e3,否則因為j c i 陣列越界造成了一些詭異的錯誤,...
HAOI2012音量調節
音量用乙個整數描述。輸入檔案中給定整數beginlevel,代表吉他剛開始的音量,以及整數maxlevel,代表吉他的最大音量。音量不能小於0也不能大於maxlevel。輸入檔案中還給定了n個整數c1,c2,c3 cn,表示在第i首歌開始之前吉他手想要改變的音量是多少。吉他手想以最大的音量演奏最後一...