题解 | #数组分组#

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

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

bool dfs(vector<int>& sel, int target, int k){
    if(k>=sel.size()&&target!=0) return false;
    if(k>=sel.size()&&target==0) return true;
    return dfs(sel, target-sel[k], k+1)||dfs(sel, target, k+1);
}

int main() {
    int n;
    while (cin >> n) {
        vector<int> arr(n);
        vector<int> sel;
        int left = 0, total = 0;
        for(int i=0;i<n;i++){
            cin>>arr[i];
            if(arr[i]%5==0) left+=arr[i];
            total+=arr[i];
            if(arr[i]%5!=0&&arr[i]%3!=0) sel.push_back(arr[i]);
        }
        if(total&1){
            cout<<"false";
            break;
        }
        int target = total/2-left;
        bool ret = dfs(sel, target, 0);
        cout<<(ret?"true":"false");
    }
}

转换问题,最后也不要用DP写了,DFS两下就写完了

全部评论

相关推荐

dachang盒子:26届秋招必须有实习经历,建议找个实习过度下,同时项目重复率也比较高没有什么难点亮点,我这里有大厂真实的项目可以提供给你学习也可以给你包装大厂实习来提高你的竞争力,感兴趣的话可以私信我或者点我主页简介
你已经投递多少份简历了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务