第二题DP只能过27,搞了半天都搞不明白- -有佬帮忙看看吗
using namespace std;
int main(){
int n,target;
cin>>n>>target;
vector<int> nums(n,0);
vector<int> nums2(n,0);
for(int i = 0;i<n;i++){
cin>>nums[i];
}
//求和
for(int i = 0;i<n;i++){
nums2[i] = nums[i]/2;
}
int mx = n+1;
vector<int> dp(target+1,mx);
dp[0] = 0;
for(int i = 0;i<n;i++){
for(int j = target;j>=nums2[i];j--){
int p1 = j>=nums[i]? dp[j-nums[i]]+1 : mx;
int p2 = dp[j-nums2[i]] +1;
dp[j] = min(min(p1,p2),dp[j]);
}
}
if(dp[target]>=mx){
cout<<-1;
return 0;
}
cout<<dp[target];