買書 n個元素裡選k個元素組成特定結果m

2021-07-29 19:33:42 字數 793 閱讀 5615

problem description

有一天feynman去書店買書,他有m元錢,書店裡有n本書,每本書的**為pi元。feynman迫不及待地想把書買回家看,並把身上的錢全部花完來買書,記剛好買k本書。請幫feynman計算他是否剛好能用m元買k本書。

input

第一行輸入三個整數m(1<=m<=100000000),n(1<=n<=30),k(1<=k<=min(8,n))

接下來一行輸入n個整數,表示每本書的**pi(1<=pi<=100000000)。

output

如果feynman剛好能用m元買k本書,輸入一行「yes」,否則輸出"no"。

思路利用dfs進行列舉(如果用二進位制列舉可能因為數太大而進行不了,於是用遞迴思想,每乙個元素選不選有兩個分支用dfs進行搜尋)

注意一些剪枝情況,另外將sum和num進行傳參降低時間複雜度。

**示例

#includeusing namespace std;

#define max 100

int s,n,m;

int arr[max];

int vis[max];//標記1

int flag;//標記2

void dfs(int a,int sum,int num)

else if(sum>s||sum>s>>n>>m;

for(int i=0;i>arr[i];

vis[i]=0;

} flag=0;

dfs(0,0,0);

if(flag>0) cout<<"yes"<

N個元素陣列中第K大元素

k key.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std template int pivotindex t arr,int first,int last arr first arr last while...

在N個元素中選取前M個元素

import org.junit.test public class solution int arr maxarr arr,3 for int i 0 i 5 i 問題 在n個元素中選取前m個元素 思路 1 建立長度為m的陣列,作為最小堆 或則arr 0,m 1 構建小頂堆 3 先往最小堆中存入一...

前 K 個高頻元素

給定乙個非空的整數陣列,返回其 現頻率前 k 高的元素。示例 1 輸入 nums 1,1,1,2,2,3 k 2 輸出 1,2 示例 2 輸入 nums 1 k 1 輸出 1 說明 你可以假設給定的 k 總是合理的,且 1 k 陣列中不相同的元素的個數。你的演算法的時間複雜度必須優於 o n log...