要是实在不理解的话,Leetcode有一个判断数组能不能分成两部分且两部分的值相等的题目,思路类似,网上应该有很多解答,可以扩展一下思路。
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int cv[N];
int dp[2005];int main()
{int n;while(scanf("%d",&n)!=EOF){int sum=0,mid=0;for(int i=1;i<=n;++i){scanf("%d",&cv[i]);sum+=cv[i];}mid=sum/2;for(int i=1;i<=n;++i) //0-1背包问题,求得一半的时间内能够处理任务达到的时间上限值{for(int j=mid;j>=cv[i];--j){dp[j]=max(dp[j],dp[j-cv[i]]+cv[i]);}}printf("%d\n",sum-dp[mid]); //剩余的可使用的任务时间}return 0;
}