注册 登录
编程论坛 C++教室

[分享]给你们出个题~~

mp3aaa 发布于 2007-11-21 17:37, 1405 次点击
N个元素的集合【1,2,3,4.。n】可以划分为若干非空子集。例如 N=4 集合【1,2,3,4】可以划分为15个不同的非空子集如下,
【1】【2】【3】【4】
【1 2】【3】【4】
【1 3】【2】【4】
【1 4】【2】【3】
【2 3】【1】【4】
【2 4】【1】【3】
【3 4】【1】【2】
【1 2】【3 4】
【1 3】【2 4】
【1 4】【2 3】
【1 2 3】【4】
【1 2 4】【3】
【1 3 4】【2】
【2 3 4】【1】
【1 2 3 4】
输入整数 N 计算出N个元素的集合【1,2,3,,,N】可以划分为多少个不同的非空子集。
输入:5
输出:52
18 回复
#2
永夜的极光2007-11-22 08:32
应该是2^N-1吧
#3
雨中飞燕2007-11-22 18:47
原帖由 永夜的极光 于 2007-11-22 08:32 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1110409&ptid=187648][/url]
应该是2^N-1吧


明显不是,你是怎么下的结论??


C/C++学习讨论群:46520219 [url=http://]C/C++算法习题(OnlineJudge)论坛:[/url] [url]http://[/url]
Blog: [url]http://[/url]
" border="0" />
[url=http://bbs.bc-cn.net/dispbbs.asp?BoardID=5&ID=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/dispbbs.asp?boardID=56&ID=181314]C++编写的Windows界面游戏[/url]
#4
coding2007-11-22 19:16
先抽出1 个元素的集合就是有:C(N,1);再抽出2个元素的集合就是C(N,2),最后抽出C(N,N)个;把所有的加起来就是二项式定理啊
#5
aipb20072007-11-22 20:53
我昨天第一个回的,帖子怎么不见了?:(
每个元素有2个状态,2^n减去空集.
#6
yanyananlin2007-11-22 21:42
顶5楼
#7
mp3aaa2007-11-23 12:28
原帖由 aipb2007 于 2007-11-22 20:53 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1111030&ptid=187648][/url]
我昨天第一个回的,帖子怎么不见了?:(
每个元素有2个状态,2^n减去空集.


不对 你仔细看下结果
#8
aipb20072007-11-23 12:32
非空子集都这样计算的,你的输入输出正确吗?
那你的答案是?
#9
mp3aaa2007-11-23 12:49
我这里没有
不过 到【n n】【n n】【n】 就已经差不多20个了
#10
aipb20072007-11-23 13:24
哎,没仔细看,要求的不是子集个数,而是原集合通过子集划分得到的个数。
见笑了!:lol
#11
leeco2007-11-23 21:29
输入26的时候输出就超过long long了,题目没说范围,我暂且用long long 写了
程序代码:
#include <iostream>
using namespace std;

typedef long long INT64;

INT64 _dp[30][30];

struct {
    INT64* operator [] (int i){
        return _dp[i];
    }   
}dp;

INT64 arr[30];

int main()
{
    arr[1]=arr[0]=dp[0][0]=1;
    for(int i=1;i<30;i++){
        dp[i][0]=dp[i-1][i-1];
        for(int j=1;j<=i;j++){
            dp[i][j]=dp[i-1][j-1]+dp[i][j-1];
        }  
        arr[i+1]=dp[i][i];  
    }
    int n;
    while(cin>>n){
        cout<<arr[n]<<endl;
    }   
}   
#12
leeco2007-11-23 21:34
上面本来要做滚动数组优化的……就当我没写吧……
#13
mp3aaa2007-11-24 17:26
:)  很好
#14
mp3aaa2007-11-24 17:34
我原来见过 Eastsun写过这个类似的算法
#15
aipb20072007-11-24 20:14
有点类似正整数划分。呵呵,做不来!:(
#16
mp3aaa2007-11-29 19:37
动态规划么
#17
aipb20072007-11-29 22:09
不是,你去搜索下就晓得什么是正整数划分了。

这个题目没有动态规划的特征吧。

不是很清楚,leeco的也看不太明白。
#18
忘记喧嚣2007-11-29 23:22
很简单的排列组合问题 .哈哈
真的  有N个就分N种情况 然后加起来
#19
mp3aaa2007-12-01 13:35
原帖由 [bold][underline]aipb2007[/underline][/bold] 于 2007-11-29 22:09 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1123309&ptid=187648][/url]
不是,你去搜索下就晓得什么是正整数划分了。

这个题目没有动态规划的特征吧。

不是很清楚,leeco的也看不太明白。

的确类似整数划分 但是用那种方法很难做

整数划分 用递归很简单就可以实现了 。。

[[italic] 本帖最后由 mp3aaa 于 2007-12-1 13:46 编辑 [/italic]]
1