C++完整代码,急需!!!!!!!

你将要在元旦演奏一场吉他专场。但你不希望声音平淡,所以你希望每个曲之间都有变化。现在你已经确定了每个曲可以与上一个曲之间的音量的变化量,即每首曲开始,你可以对音量选择增加或减少一个指定的变化值。当然音量不可能为负数,也不能太高,因此必需保证每首曲音量在0和maxLevel之间(包含)。
你的任务是,根据已有的开始音量beginLevel 和每首曲之间的变化量,求出最后一首曲的最大可能音量。如果没有方案,输出 -1。
[输入文件:song.in]
文件第一行有三个整数,n, beginLevel, maxLevel,分别表示曲目数,开始量,最大限制音量。
下面有n-1行整数,第i行整数表示第i首曲与第i+1首曲之间的变化量。
[输入文件:song.in]
文件只一行一个数,答案。
[样例:]
4 5 10
5
3
7
5 8 20
15
2
9
10
10
-1
【数据范围】
1<=n<=100;
1<= maxLevel <=1000
0<= beginLevel <= maxLevel

慕村225694
浏览 601回答 1
1回答

ITMISS

#include <iostream>using namespace std;&nbsp;int n;int begin_Level, max_Level;int res, value[100];&nbsp;//&nbsp; &nbsp; 深度优先搜寻&nbsp;void dfs(int t, int k = 1){&nbsp; &nbsp; if( t<0 || t>max_Level )&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; if( k == n ){&nbsp; &nbsp; &nbsp; &nbsp; if( t>res && t>=0 && t<=max_Level )&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res = t;&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; t -= value[k];&nbsp; &nbsp; // try -&nbsp; &nbsp; dfs(t, k+1);&nbsp; &nbsp; t += value[k];&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; t += value[k];&nbsp; &nbsp; // try +&nbsp; &nbsp; dfs(t, k+1);&nbsp; &nbsp; t -= value[k];&nbsp; &nbsp;&nbsp;}&nbsp;int main(){&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; //&nbsp; &nbsp; 若有要求输入输出文件,自行解决&nbsp;&nbsp; &nbsp; while( cin >> n >> begin_Level >> max_Level )&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; res = -1;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for(int i = 1; i < n; ++i)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cin >> value[i];&nbsp; &nbsp; &nbsp; &nbsp; dfs(begin_Level);&nbsp; &nbsp; &nbsp; &nbsp; cout << res << endl;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }&nbsp; &nbsp; return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP