一道演算法題,求更好的解法

2022-03-15 22:29:07 字數 848 閱讀 8990

問題(阿里2023年實習):

給定乙個數

t,以及

n個整數,在這

n個整數中找到相加之和為

t的所有組合,例如

t = 4

,n = 6,這6

個數為[4, 3, 2, 2, 1, 1]

,這樣輸出就有

4個不同的組合,它們的相加之和為4:

4, 3+1, 2+2, and 2+1+1

。請設計乙個高效演算法實現這個需求。

下面,給出一種解法:

**#include 

<

stdio.h

>

#define

len 20

intpath[len];

intarr[len] =;

void

clearpath()

}void

out_put()

printf("\n

");}/*

演算法:**q(n, t)表示從arr[0]...arr[n]中選出和為t的子集,則

**q(n, t) = q(n-1, t-arr[n]) + q(n-1, t)

*/void

q(int

n, int

t, int

flag)

else

if(arr[n] 

==t)

}else

}void

subsum(

intlen, 

intt)

intmain()

該演算法的時間複雜度為指數級(但實際情況應該好很多,與t相關),而且最大的問題在於,無法去掉重複的組合。求更好的解法。

一道演算法題的一種O n 解法

很早就有去做做的想法,可是一直沒動手 今天花了點時間搞搞 結果如下 核心部分 1public list result getresults int arr 239 判斷當前的和是否等於現有結果列表中的資料 40else if temp.relativeelevation rlist 0 relati...

一道演算法題

兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...

一道演算法題

1.上午主要做了對翻譯任務的劃分,下午把 翻譯完畢。2.明天要講的演算法題 對乙個集合,求出其連續元素組成的子集中,和最大的子集 我對這道題的理解是 1 若集合中最小值大於0,意味著所有的都大於0,則最大的子集和,為所有值加起來 2 若集合中最大值小於0,意味著所有的都小於0,則最大的子集和,為集合...