思路:
直接暴力去除會有問題,比如(2,3,5),目標爲11,這時直接除是不行的,所以這題得用動態規劃
時間複雜度N*aim,空間複雜度可以是N*aim,下面代碼做了空間壓縮,空間複雜度aim
#include <iostream>
#include <vector>
#include <limits.h>
using namespace std;
int getMin(int n,vector<int> &nums,int aim){
if(aim == 0) return 0;
if(n == 0) return -1;
vector<int> dp(aim+1,INT_MAX);
dp[0] = 0;
for(int i = 0;i < n;i++){
for(int j = nums[i];j <= aim;j++){
if( dp[j-nums[i]] < INT_MAX)
dp[j] = min(dp[j],dp[j-nums[i]]+1);
}
}
return dp[aim]== INT_MAX? -1:dp[aim];
}
int main(){
int n,aim;
cin >> n >> aim;
vector<int> nums(n);
for(int i = 0;i < n;i++) cin >> nums[i];
int res = getMin(n,nums,aim);
cout << res << endl;
}