贪心算法,AC83%:
#include <iostream>
#include <vector>
#include <algorithm>  
#include <string>
#include <sstream>
using namespace std;

bool SortByM1(const int &v1, const int &v2) 
{
return v1 > v2;
}
//main
int main(){
vector<int> vecPrice;
int nMoney;
int nTemp;
int nCount = 0;
int nCurrentNumber = 0;
string strLine; 
getline(cin, strLine); 
stringstream iss(strLine); 
for (int i; iss >> i; vecPrice.push_back(i));
nMoney = vecPrice.back();
vecPrice.pop_back();
//降序排列
sort(vecPrice.begin(), vecPrice.end(), SortByM1);
vector<int>::const_iterator iter = vecPrice.begin();
for (; iter != vecPrice.end(); iter++){
nCurrentNumber = *iter;
while (nCurrentNumber<=nMoney) //贪心算法
{
nCount++;
nMoney -= nCurrentNumber;
}
if (nMoney==0)
{
break;
}
}
if (nCount==0||nMoney>0)
cout << "-1" << endl;
else
   cout << nCount << endl;
}