問題描述
在今年藍橋杯的決賽中,一共有 10?道題目,每道題目的分數依次為?5?分,5?分,10?分,10 分,15?分,15?分,20?分,20?分,25 分,25 分。
假設某位參賽選手在解答每一道題時,要么能得到該題的全部分數,要么就得?0?分。那么請問,這位參賽選手在完成這?10?道題之后,所能獲得的總分值存在多少種不同的情況?
注意,總分值僅需關注選手?10?道題的總得分,而無需關注具體是由哪些題獲得了相應的分數。例如,選手第一道題獲得?5?分其余題均為?0?分,與第二道題獲得?5?分其余題均為 0 分,應視為同一種情況。
答案提交
這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
dfs,用set 去重
#include<iostream>
#include<set>
using namespace std;int a[11] = {0, 5, 5, 10, 10, 15, 15, 20, 20, 25, 25};
set<int> s; //用于存儲所有可能的總分,自動去重//x:當前處理的題目編號 sum:當前已選題目的總分
void dfs(int x, int sum)
{if(x > 10){s.insert(sum);return;}//不選第 x 題 dfs(x+1, sum);//選第 x 題dfs(x+1, sum+a[x]);
}int main()
{dfs(1, 0);cout<<s.size()<<endl;return 0;
}