题目大意就是,有N个不同价值的商品,给你M块钱,怎样正好把钱花完然后买的商品数量最少?
解法一:iterative deepening search
先看一个商品可不可以花完,做一个深度优先搜索,再看两个商品,再看三个。。。。效率最低的方法
bool dfs(int n, int* A, int cur, int b, const vector<int>& goods) {
if(cur==n){
if(b==0) {
return true;
} else {
return false;
}
}
int s = cur? A[cur-1]+1 : 0;
for(int i=s; i<goods.size(); i++) {
A[cur]=i;
bool ans= dfs(n, A, cur+1, b-goods[i], goods);
if(ans) return true;
}
return false;
}
vector<int> caculate(vector < int > a, int b) {
int path[a.size()];
vector<int> re;
memset(path,0, sizeof(path));
for(int i=1; i<=a.size(); i++) {
bool c=dfs(i, path, 0,b, a);
if(c){
re = vector<int>(path,path+a.s