题目链接
题意
CSL手上有n个苹果,第i个苹果的质量是wi,现在他想把这些苹果分给他的好朋友wavator和tokitsukaze。但是CSL为了不让他们打架,根据质量决定尽量地均分成两堆分给他们。现在CSL想知道到底给每个人分多少质量的苹果。
注意:苹果不能劈开来,并且如果不能正好均分,tokitsukaze小姐姐会拿到重的那一堆。
思路
- sum为苹果总数,将苹果尽可能均分为两份,即可以理解为sum/2的背包问题
参考代码
#include<bits/stdc++.h>
using namespace std;
long long aa[110];
long long sum=0;
long long dp[10100];
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>aa[i];
sum+=aa[i];
}
for(int i=0;i<n;i++)
{
for(int j=sum/2;j>=aa[i];j--)
{
dp[j]=max(dp[j],dp[j-aa[i]]+aa[i]);
}
}
cout<<dp[sum/2]<<" "<<sum-dp[sum/2];
}