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...