一道google面試題

輸入n,把1-n分紅兩個和相等的子集,有多少種分法ios

想了個dp,直接揹包也行ide

#include <iostream>
#include <cstdio>

using namespace std;

int dp[55];

int main() {
    int n;
    scanf("%d", &n);
    int s = n * (n + 1) / 2;
    if(s & 1) {
        puts("0");
        return 0;
    }
    s >>= 1;
    dp[0] = 1;
    for(int j = 1; j <= n; j++)
        for(int i = s; i >= j; i--)
            dp[i] += dp[i-j];
    printf("%d\n", dp[s] >> 1);
    return 0;
}
View Code
相關文章
相關標籤/搜索