一道算法题,需要想出合适的算法解决

sinat_32465411 2017-03-21 06:17:58
怎么使用非暴力的方式回答下面的问题?
Given an integer n and a set S of integers, is there some S′ ⊆ S such that the sum of the numbers in S′ is n.

最好能用java写一下,方便理解
...全文
229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zs808 2017-03-22
  • 打赏
  • 举报
回复
首先,这个题目有解的前提是,集合S与S'中的元素都是不同的(因为如果可相同的话,我就可以{n1,n1,n1........n1},这就无穷多个子集了) 这个嘛,,,,我的思考是: 假设求集合{e1,e2,e3,e4,e5...en}的子集,那么: 元素数为1的有{e1},{e2},{e3}...{en}共n个 元素数为2的有{e1,e2},{e1,e3}...{en-1,en}共C(n,2)个 元素数为3的有{e1,e2,e3},{e1,e2,e4}....{en-2,en-1,en}共C(n,3)个 ... 元素数为n的有{e1,e2,e3...en},共C(n,n),也就是1个。 那么总和E(s) = C(n,1)+C(n,2)+C(n,3)+...+C(n,n)=2^n 所以,代码就是:
	public static void main(String[] args) {
		int n = 0;//子集个数
		int slength = 0;//集合S的长度
		Scanner scan = new Scanner(System.in);
		//以下是输入S的过程(一行,以空格分隔)
		String s = scan.nextLine();
		scan.close();
		slength = s.split(" ").length; //求S的长度
		n=(int) Math.pow(2, slength); //求子集数
		System.out.println(n);//输出
	}
China小嘿 2017-03-21
  • 打赏
  • 举报
回复
暴力枚举或者暴力遍历,循环都可以或者开挂编写set.length!也行 ,其实 就是求S的子集如果S中有5个元素,不考虑顺序的情况下n=5!
zyqok 2017-03-21
  • 打赏
  • 举报
回复
引用 2 楼 sunnyzyq 的回复:
[quote=引用 1 楼 kingofdancer 的回复:] 哇 我都看不懂哎= =问题啥意思啊
给你一个整数n和一个整数Set集合S,如果有 S' 存在于集合S中,统计S'的个数,并把它赋值给n [/quote] 更正下:给你一个整数n和一个整数Set集合S,如果有集合S' 是集合S的子集,则求出这样的子集S'有多少个,并赋值给n
zyqok 2017-03-21
  • 打赏
  • 举报
回复
引用 1 楼 kingofdancer 的回复:
哇 我都看不懂哎= =问题啥意思啊
给你一个整数n和一个整数Set集合S,如果有 S' 存在于集合S中,统计S'的个数,并把它赋值给n
kingofdancer 2017-03-21
  • 打赏
  • 举报
回复
哇 我都看不懂哎= =问题啥意思啊

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧