1. 程式人生 > 其它 >Codeforces 1442D - Sum(找性質+分治+揹包)

Codeforces 1442D - Sum(找性質+分治+揹包)

dfs就好了

先去重一下

class Solution {
public:
    vector<vector<int> > ret;
    int cnt[55], n;
    void dfs(vector<int> candidates, int target, int k, vector<int> v)
    {
        if (target < 0) return;
        if(k == n)
        {
            if(target == 0)
                ret.push_back(v);
            
return; } for(int i = 0; i <= cnt[candidates[k]]; i++) { if(i == 0) dfs(candidates, target, k + 1, v); else { for(int j = 1; j <= i; j++) v.push_back(candidates[k]); dfs(candidates, target
- candidates[k] * i, k + 1, v); for(int j = 1; j <= i; j++) v.erase(v.end() - 1); } } } vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { memset(cnt, 0, sizeof(cnt)); vector
<int> v; int length = candidates.size(); for(int i = 0; i < length; i++) cnt[candidates[i]]++; sort(candidates.begin(), candidates.end()); candidates.erase(unique(candidates.begin(), candidates.end()), candidates.end()); n = candidates.size(); dfs(candidates, target, 0, v); return ret; } };
自己選擇的路,跪著也要走完。朋友們,雖然這個世界日益浮躁起來,只要能夠為了當時純粹的夢想和感動堅持努力下去,不管其它人怎麼樣,我們也能夠保持自己的本色走下去。