美文网首页动态规划
[算法设计与分析]DP 解题报告

[算法设计与分析]DP 解题报告

作者: vouv | 来源:发表于2018-06-17 17:09 被阅读53次

    Problem

    对于由从1到N (1 <= N <= 39)这N个连续的整数组成的集合来说,我们有时可以将集合分成两个部分和相同的子集合。
    例如,N=3时,可以将集合{1, 2, 3} 分为{1,2}和{3}。此时称有一种方式(即与顺序无关)。
    N=7时,共有四种方式可以将集合{1, 2, 3, ..., 7} 分为两个部分和相同的子集合:
    {1,6,7} 和 {2,3,4,5}
    {2,5,7} 和 {1,3,4,6}
    {3,4,7} 和 {1,2,5,6}
    {1,2,4,7} 和 {3,5,6}
    输入:程序从标准输入读入数据,只有一组测试用例。如上所述的N。
    输出:方式数。若不存在这样的拆分,则输出0。

    test input

    7
    

    test output

    4
    

    ac code

    //
    //  main.cpp
    //  和相同的子集合
    //
    //  Created by jetviper on 2017/3/24.
    //  Copyright © 2017年 awlsx. All rights reserved.
    //
    
    #include<iostream>
    #include <stdio.h>
    
    
    int dp[200];
    
    int main()
    {
        for (int i=0; i<200; i++) {
            dp[i]=0;
        }
        int n;
        scanf("%d",&n);
        
        int res = n*(n+1)/2;
        
        if(res%2)
        {
            printf("0\n");
            return 0;
        }
        res/=2;
       
        dp[0]=1;
        
        for(int i=1;i<=n;i++)
            for(int j=res;j>=i;j--)dp[j]+=dp[j-i];////dp[j]表示加起来等于j的组数
        
    
        printf("%d\n",dp[res]/2);
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:[算法设计与分析]DP 解题报告

        本文链接:https://www.haomeiwen.com/subject/dwvweftx.html