zoukankan      html  css  js  c++  java
  • 阿里实习招聘面试编程题

    给定正整数N,求将整数集合{k | 1<=k<=N且k为整数}划分为和相同的两个子集和的方式

    eg:{1,2,3} 划分方式有一种{1,2},{3}

    方法同Leetcode-494 TargetSum

    dp:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int SubsetSum(int num[],int len,int s)  //在num[]中找所有可以加和=s的所有情况
    {
        int n;
        int dp[s+1];
        memset(dp,0,sizeof(dp));
        dp[0]=1;
        for(int j=0;j<len;++j)  //枚举num中的所有元素
        {
            n=num[j];
            for(int i=s;i>=n;--i)
            {
                dp[i]=dp[i]+dp[i-n];  //dp[i-n]+n=i
            }
        }
        return dp[s];
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
             int num[n+1];
             int sum=0;
             int k=0;
            for(int i=1; i<=n; ++i)
            {
                num[k++]=i;
                sum+=i;
            }
    
        if(sum%2!=0)
        {
            printf("0
    ");
        }
        else
        {
            sum=sum/2;
            printf("%d
    ",SubsetSum(num,n,sum)/2);
        }
    
        }
        return 0;
    }
  • 相关阅读:
    git
    rocketMq
    mysql 擎特点
    mysql 主从复制实现步骤
    mysql数据库服务日志
    mysql 主命令总结
    linux sed
    学习进步的方法
    my-innodb-heavy-4g.cnf
    FTP主动模式和被动模式的区别【转】
  • 原文地址:https://www.cnblogs.com/dshn/p/8810783.html
Copyright © 2011-2022 走看看