a981. 求和問題 5/16/2025

解法一、DFS

🔹 剪枝

當 sum > m 時,因為輸入是正整數
所以之後的 sum 只有可能比 m 大,沒有可能 = m

✅ 完整代碼

評分結果(參考) : AC (1s, 344KB)

#include <bits/stdc++.h>
using namespace std;

int n, m;
vector<int> nums;
vector<int> ans;
bool haveSol = false;

void dfs(int sum, int i, int j){
    if(sum>m || i>n) return;
            
    if(sum == m){
        haveSol = true;
        for(int k=0; k<j; k++){
            if(k != 0) cout << " ";
            cout << ans[k];
        }
        cout << "\n";
        
        return;
    }
    
    for(; i<n; i++){
        ans[j] = nums[i];
        dfs(sum+nums[i], i+1, j+1);
    }
}

int main(){
    ios::sync_with_stdio(false); 
    cin.tie(nullptr);
    
    cin >> n >> m;
    
    nums.resize(n);
    ans.resize(n);
    
    for(int& i : nums) cin >> i;
    sort(nums.begin(), nums.end());

    dfs(0, 0, 0);
    if(!haveSol) cout << "-1";

    return 0;
}