藍橋杯模擬賽:奇怪的捐贈(dfs)


地產大亨Q先生臨終的遺願是:拿出100萬元給X社區的居民抽獎,以稍慰藉心中愧疚。
麻煩的是,他有個很奇怪的要求:

  1. 100萬元必須被正好分成若干份(不能剩余)。每份必須是7的若干次方元。
    比如:1元, 7元,49元,343元,…

  2. 相同金額的份數不能超過5份。

  3. 在滿足上述要求的情況下,分成的份數越多越好!

  4. 請你幫忙計算一下,最多可以分為多少份?

注意:只需要填寫一個整數,就是分成的份數,不要填寫任何多余的內容。比如說明文字。

分析:
dfs
因為相同金額可以有5份 所以遞歸的時候有兩種情況
1.當前次方元+1 visit[step]+1
2.下一次方元+1 visit[step+1]+1
通過份數不能超過5份和金額不能大於100萬條件退出遞歸

#include <iostream>
#include <cmath>
using namespace std;
int count = 0;
int visit[10] = {0};
int num;
void dfs(int step,int count) { //step代表7的幾次方
if(visit[step] > 5) { //相同金額的份數不能超過5份
return;
}
if(count > 1000000) {
return;
} else if(count == 1000000){
num = 0;
for(int i = 0; i < 10; i++) {
num += visit[i];
}
cout<< num;
exit(0);
}
count += pow(7,step);
visit[step]++;
dfs(step, count); //兩種路 visit[step]+1
dfs(step+1, count); //visit[step+1]+1
visit[step]--;
count -= pow(7,step);
}
int main()
{
dfs(0,0);
return 0;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com