为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

#include <iostream>

using namespace std;

 

int n;

int begin_Level, max_Level;

int res, value[100];

 

//    深度优先搜寻 

void dfs(int t, int k = 1)

{

    if( t<0 || t>max_Level )

        return;

    if( k == n ){

        if( t>res && t>=0 && t<=max_Level )

            res = t;

        return;     

    }

         

    t -= value[k];    // try -

    dfs(t, k+1);

    t += value[k];        

     

    t += value[k];    // try +

    dfs(t, k+1);

    t -= value[k];    

}

 

int main()

{    

    //    若有要求输入输出文件,自行解决 

    while( cin >> n >> begin_Level >> max_Level )

    {

        res = -1;    

        for(int i = 1; i < n; ++i)

            cin >> value[i];

        dfs(begin_Level);

        cout << res << endl;        

    }

    return 0;

}


查看完整回答
反对 回复 2018-09-15
  • 1 回答
  • 0 关注
  • 600 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信