1. 程式人生 > >洛谷 P1877 [HAOI2012]音量調節

洛谷 P1877 [HAOI2012]音量調節

無法 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>
using
namespace 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]音量調節