求大佬说说这道算法题的解法

Rachelint 2018-09-19 09:16:28
输入N个数(可以重复),每个数都是2的整数次幂,问有多少个整数可以表示为这些数中若干个(可以是0个)的和。
例如,输入3个数1,4,4,则0,1,4,5,8,9均可以表示;2,3和6则不行。

我的思路是先解决N个数不可重复的情况,这样的话,2的整数次幂这个条件可以派的上用场,但之后就不知道怎么继续了。
...全文
283 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2018-10-16
  • 打赏
  • 举报
回复
先排序,然后做简化,3个同样的2次幂等价于1个2次幂+1个2的高次幂
Black_Blade 2018-10-12
  • 打赏
  • 举报
回复
算法如下:
输入:input[]
初始化S = {0}
for i = 1 to n:
S' = { x + input[i] | if x in S}
S = S ∪ S'
输出:|S|
以为输入是大于0的,S可以以一个递增的链表来表示,这样解决结果的复杂度为O(n^2)
idealguy 2018-10-03
  • 打赏
  • 举报
回复
将给定的数分成n组,用两个数组A(i), N(i), i=1..n,表示,A(i)表示每个不重复的数, N(i)表示每个数的重复次数。

然后就归结为一个“任意重循环”问题。 请参阅:
完美实现任意重循环 https://bbs.csdn.net/topics/300028827
idealguy 2018-10-03
  • 打赏
  • 举报
回复
楼上更正
1)给定一个整数,问能否表示为这些数中若干个的和?(可以是0个(否),>=1个(是))
idealguy 2018-10-03
  • 打赏
  • 举报
回复
“输入N个数(可以重复),每个数都是2的整数次幂“,原题的提问目标不明确:”问有多少个整数可以表示为这些数中若干个(可以是0个)的和。”,可以有两种可能:

1)给定一个整数,问能否表示为这些数中若干个的和?(可以是0个(否),>1个(是))
2) 问有多少个整数可以表示为这些数中若干个(至少一个)的和。因为零个没有意义。

这两种情况的算法完全不一样。
tanta 2018-09-19
  • 打赏
  • 举报
回复
C#的实现:
private void button1_Click(object sender, EventArgs e)
{
int[] N = { 1, 4, 4 };
Array.Sort(N);
Array.Reverse(N);
int Num = int.Parse(textBox1.Text);
foreach(int i in N)
{
if(Num >=i)
{
Num -= i;
}
}
if(Num ==0)
{
label1.Text = "可以";
}
else
{
label1.Text = "不行";
}
}
tanta 2018-09-19
  • 打赏
  • 举报
回复
我给你一个思路,你看可不可以:
N个2的整数次幂从大到小排序,分别是n1,n2
输入的数为X,
循环n1,n2...
如果X大于循环中的n,就从中减去
循环结束后,判断,有剩余,说明不行,有,说明行。
dceacho 2018-09-19
  • 打赏
  • 举报
回复
先简化输入,去掉一些没用的,如果一个数至少出现了三次,则可以合并其中的2个
比如,2,4,4,4,32,32,32,32
4+4=8,所以这两个4可以做到的单个8也能做到
优化后就剩 2,4,8,32,32,64了
不停的优化至不能再优化
然后一个数重复次数就不超过3次了, 所以即使是64位,简化后的输入个数也最多是128个数字(每个数字出现2次)

最多128个数字算组合然后去掉可能重复的,复杂度还是可以接受的

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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