编程练习-2022-05-23-Andy

题目描述

两个大盗终于偷来了n个金块,第i块重量为x[i]斤。他们希望将这n个金块分成两组,要让这两组重量最接近,求每组重量为多少。

输入输出格式

输入格式

输入第一行为正整数n,n<=20
第二行为n个正整数,均不超过1000

输出格式

输出一行包含两个数字,较小的数字先输出。

AC代码

#include 
using namespace std;
int main()
{
    int n,a[10000],dp[10000],w[10000],v[10000];
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++){w[i]=a[i];v[i]=w[i];}
    int sum=0;
    for(int i=1;i<=n;i++)sum+=a[i];
    int m=sum/2;
    for(int i=1;i<=n;i++)
        for(int j=m;j>=w[i];j--)
            if(j>=w[i]){
                //if(dp[j-w[i]]>=dp[j])w[i]=-1;
                dp[j]=max(dp[j-w[i]]+v[i],dp[j]);
                
            }
    cout<

你可能感兴趣的:(编程练习-2022-05-23-Andy)