大家一起来讨论
对动态规划还是迷迷糊糊,套用01的模版却不知道变通,希望可以抛砖引玉,可以吸引更多的人来讨论。
vec[i] 表示第i个歌的音高。
num[i][j] 表示 在第i首歌j调是否可以。
num[i][j] 与 num[i - 1][j - vec[i]] , num[i-1][j + vec[i]]有关。
#include <iostream>
#include <vector>
using namespace std;
int n,beL,maxL;
int num[60][1010];
vector<int> vec(60);
void dp(){
for(int i = 1; i <= n; i++){
for(int j = 0; j <= maxL; j++){
if(j - vec[i] >= 0){
if(num[i - 1][j - vec[i]]) {
num[i][j] = true;
}
}
if(j + vec[i] <= maxL){
if(num[i - 1][j + vec[i]]) {
num[i][j] = true;
}
}
}
}
for(int i = maxL; i >= 0; i--){
if(num[n][i]){
cout<<i<<endl;
return;
}
}
cout<< -1<<endl;
}
int main(){
cin>>n>>beL>>maxL;
for(int i = 1; i <= n; i++){
cin>>vec[i];
}
num[0][beL] = true;
dp();
return 0;
} 