1. 程式人生 > >Subset Sums

Subset Sums

lose iostream pen hid isp 個數 open esp class

鏈接

分析: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