給定整數a1、a2、.......an,判斷是否可以從中選出若干數,使它們的和恰好為k。
最簡單暴力的方式就是找出其中所有可能的組合判斷是否等於指定的k值,狀態數是2的n+1次方,時間複雜度o(2^n),可以採用深度優先搜尋遍歷所有可能的情況。
static int n = 4;
static int k = 13;
static int arr = ;
static stacks = new stack();//儲存可能用到的數
public static void main(string args)
} else
} private static boolean dfs(int i, int sum)
return false;
}
其中dfs()就是表示深度優先搜尋的函式,dfs(i,sum)的直觀意義就是表示前i項之和為sum,然後對於i項之後進行分支。
如果i=n,表示前面n項都計算完畢,
如果i
即通過此方法遍歷完畢上圖中整個狀態。
深度優先搜尋 部分和問題
include include include include define max n 2147483647 using namespace std 深度優先搜尋 部分和問題 給定整數a1,a2,a3,an,判斷是否可以從中選出若干數,使它們的和恰好為k。問題解決思路 1 dfs遍歷每個數列元素能...
部分和問題
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入 首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出如果和恰好可以為k,輸出 yes 並按輸入順序依次...
部分和問題
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給定整數a1 a2 an,判斷是否可以從中選出若干數,使它們的和恰好為k。輸入 首先,n和k,n表示數的個數,k表示數的和。接著一行n個數。1 n 20,保證不超int範圍 輸出如果和恰好可以為k,輸出 yes 並按輸入順序依次...