→题目链接←
很水的一道题
如果第i首歌时音量为j是可行的,那么dp[i][j]=true
最初dp[0][beginLevel]=true;
之后每次暴力扫上一次的状态,转移就好
代码:
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<set>
#define ll long long
#define inf 10000001
using namespace std;
bool dp[55][1010];
int n,m,Max;
int main(){
scanf("%d%d%d",&n,&m,&Max);
dp[0][m]=true;
for(int i=1; i<=n; i++){
int x;
scanf("%d",&x);
for(int j=0; j<=Max; j++){
if(dp[i-1][j] && j-x>=0)dp[i][j-x]=true;
if(dp[i-1][j] && j+x<=Max)dp[i][j+x]=true;
}
}
for(int i=Max; i>=0; i--){
if(dp[n][i]){
printf("%d\n",i);
return 0;
}
}
printf("-1\n");
return 0;
}