第二题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];
点赞 3

相关推荐

Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享

牛客热帖

更多
牛客网
牛客企业服务