• 划分为k个相等的子集


    题目描述

    给定一个包含n个整数的数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

    输入

    输入包括共2行
    第1行:整数数组元素个数 n和非空子集个数K
    第2行:n个整数

    输出

    若能划分为k个相等的子集则输出 Yes
    否则输出 No

    样例输入

    复制样例数据

    7 4
    4 3 2 3 5 2 1
    

    样例输出

    Yes
    

    提示

    说明: 有可能将其分成 4 个子集(5),(1,4),(2,3),(2,3)等于总和。
    100%的数据满足:0<n<15,  0<K<10,  0<nums[i]<1000

    来源/分类

    #include <iostream>
    #include <bits/stdc++.h>
    using namespace std;
    int n,s,a[20];
    bool vis[20];
    bool dfs(int x,int c,int k){
        if(k==1) return true;
        if(x==s) return dfs(0,0,k-1);
        int i;
        for(i=c;i<n;i++){
            if(vis[i]==true) continue;
            vis[i]=true;
            if(dfs(x+a[i],c+1,k)) return true;
            vis[i]=false;
        }
        return false;
    }
    int main()
    {
        int k;
        cin>>n>>k;
        int i;
        long long sum=0;
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        if(sum%k!=0) printf("No
    ");
        else {
            s=sum/k;
            bool y=dfs(0,0,k);
            if(y==true) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    基于组的策略(GBP)开启新型网络设计时代
    49 多维数组(二维数组)
    48 查找
    47 排序
    46 字符数组和字符串
    45 数组应用
    44 数组
    43 C语言宏定义
    42 预处理命令
    41 函数封装练习
  • 原文地址:https://www.cnblogs.com/skyleafcoder/p/12319516.html
Copyright © 2020-2023  润新知