題目鏈結
第一行依次為三個整數:n, beginlevel, maxlevel。輸出描述:第二行依次為n個整數:c1,c2,c3……cn。
輸出演奏最後一首歌的最大音量。如果吉他手無法避免音量低於0或者高於maxlevel,輸出-1。如
3 5 10這個題目相信大家能看出來是屬於揹包問題,但應用到具體卻有些無從下手,我也是。5 3 7
但自己仔細去發現是應從dp[1][beginlever]開始,之後列舉所有滿足條件的情況即 c[i] + j <= maxlever; j - c[i] > 0,陣列dp[i][j]為乙個標記的作用,真正尋找的是下標 j 。
不多說,上**:
#include
#include
using
namespace std;
int n, beginlever, maxlever, dp[
1024][
1024]=
, c[
1024];
//dp 實際上為乙個標記陣列, 能取到、不能取到
intmain()
// 找出所有滿足可能的情況,然後再滿足情況中找出 max
for(
int i = maxlever; i >=0;
--i)
if(dp[n +1]
[i])
printf
("-1");
return0;
}
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首歌開始之前吉他手想要改變的音量是多少。吉他手想以最大的音量演奏最後一...