Subset Sums

Posted wolf940509

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Subset Sums相关的知识,希望对你有一定的参考价值。

链接

分析:dp[i][j]表示前i个数能够组成j的对数,可得dp[i][j]=dp[i-1][j]+dp[i-1][j-i],所以最后dp[n][sum/2]既是所求

技术分享
 1 /*
 2     PROB:subset
 3     ID:wanghan
 4     LANG:C++
 5 */
 6 #include "iostream"
 7 #include "cstdio"
 8 #include "cstring"
 9 #include "string"
10 using namespace std;
11 const int maxn=50;
12 const int maxm=1000;
13 int a[maxn],n,ans,cnt;
14 int dp[maxn][maxm];
15 int main()
16 {
17     freopen("subset.in","r",stdin);
18     freopen("subset.out","w",stdout);
19     cin>>n;
20     int sum=0;
21     for(int i=1;i<=n;i++){
22         sum+=i;
23     }
24     if(sum%2){
25         cout<<"0"<<endl;
26     }else{
27         ans=sum/2;
28         for(int i=1;i<=n;i++)
29             dp[i][0]=1;
30         for(int i=1;i<=n;i++){
31             for(int j=1;j<=ans;j++)
32                 dp[i][j]=dp[i-1][j]+dp[i-1][j-i];
33         }
34         cout<<dp[n][ans]<<endl;
35     }
36 }
View Code

 

以上是关于Subset Sums的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces348C - Subset Sums

洛谷P1466 集合 Subset Sums

洛谷P1466 集合 Subset Sums

usaco-Subset Sums

CF348C Subset Sums

USACO 2.2Subset Sums (DP)