就是二维背包的思路,死活不知道哪里出错了
#include <bits/stdc++.h>
#define maxn 100+10
#define maxm 8000+10
using namespace std;
bool dp[maxn][maxm];
int a[2*maxn];
int main()
{
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++){cin>>a[i];sum+=a[i];}
//memset(dp,false,sizeof(dp));
dp[0][0]=1;
for(int i=1;i<=n;i++)
for(int k=n/2;k>=1;k--)
for(int j=sum/2;j>=a[i];j--)
dp[k][j]=dp[i][j]|dp[k-1][j-a[i]];
for(int j=sum/2;j>=0;j--)if(dp[n/2][j]){cout<<j<<endl<<sum-j;break;}
return 0;
}