c_cpp 子集和问题| DP-25

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 子集和问题| DP-25相关的知识,希望对你有一定的参考价值。

//https://www.geeksforgeeks.org/subset-sum-problem-dp-25/
#include <iostream>
using namespace std;

bool subset  (int set[], int n, int sum) {
    bool dp[sum+1][n+1];

    for (int i=0; i<=n; i++)
        dp[0][i]= 1;
    for (int i=1; i<=sum; i++)
        dp[i][0]= 0;

    for (int i=1; i<= sum; i++) {
        for (int j=1; j<=n; j++) {
            if (i < set[j-1])
                dp[i][j]= dp[i][j-1];
            else
                dp[i][j]= dp[i][j-1] || dp[i-set[j-1]][j-1];
        }
    }
    return dp[sum][n];
}

int main() {
    int n, sum;
    cin>> n>> sum;
    int a[n];
    for (int i=0;i<n;i++)
        cin>>a[i];

    if (subset(a,n,sum))
        cout<< "Sum exists!";
    else
        cout<< "No such sum!";
}

以上是关于c_cpp 子集和问题| DP-25的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 子集总和

c_cpp 生成数组的所有子集

c_cpp Array另一个数组的子集

c_cpp GFG Array另一个数组的子集

c_cpp 子集树与排列树的.cpp

c_cpp [子集I]给定一组不同的整数S,返回所有可能的子集。注意:子集中的元素必须按非降序排列。 Ť