洛谷 P1877 [HAOI2012]音量調節
阿新 • • 發佈:2017-08-25
無法 ble put 依次 www. std 音量 log 如果
P1877 [HAOI2012]音量調節
題目描述
一個吉他手準備參加一場演出。他不喜歡在演出時始終使用同一個音量,所以他決定每一首歌之前他都需要改變一次音量。在演出開始之前,他已經做好一個列表,裏面寫著每首歌開始之前他想要改變的音量是多少。每一次改變音量,他可以選擇調高也可以調低。
音量用一個整數描述。輸入文件中整數beginLevel,代表吉他剛開始的音量,整數maxLevel,代表吉他的最大音量。音量不能小於0也不能大於maxLevel。輸入中還給定了n個整數c1,c2,c3,...,cn,表示在第i首歌開始之前吉他手想要改變的音量是多少。
吉他手想以最大的音量演奏最後一首歌,你的任務是找到這個最大音量是多少。
輸入輸出格式
輸入格式:
第一行依次為三個整數n, beginLevel, maxLevel。
第二行依次為n個整數 c1,c2,c3,...,cn。
數據規模:
1<=n<=50, 1<=ci<=maxLevel, 1<=maxLevel<=1000, 0<=beginLevel<=maxLevel
輸出格式:
輸出演奏最後一首歌的最大音量。如果吉他手無法避免音量低於0或者高於maxLevel,輸出-1。
輸入輸出樣例
輸入樣例#1:3 5 10 5 3 7輸出樣例#1:
10
二維dp
#include<bits/stdc++.h> usingnamespace std; int n,m,maxn,a[1001],dp[1001][1001]; int main() { scanf("%d%d%d",&n,&m,&maxn); for(int i=1;i<=n;i++) scanf("%d",&a[i]); dp[0][m]=1; for(int i=1;i<=n;i++) { for(int j=0;j<=maxn;j++) { if(dp[i-1][j]&&j+a[i]<=maxn) dp[i][j+a[i]]=1; if(dp[i-1][j]&&j-a[i]>=0) dp[i][j-a[i]]=1; } } for(int i=maxn;i>=0;i--) { if(dp[n][i]) { printf("%d\n",i); return 0; } } puts("-1\n"); }
洛谷 P1877 [HAOI2012]音量調節