1 条题解

  • 0
    @ 2025-2-14 21:20:41

    C :

    #include"stdio.h"
    #include"string.h"
    int dp[10001];
    int max(int a,int b)
    {
        return a>b?a:b;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            int s[501],i,j,sum=0;
            memset(dp,0,sizeof(dp));
            for(i=0;i<n;i++)
                {
                    scanf("%d",&s[i]);
                    sum+=s[i];
                }
            int v=sum/2;
            for(i=0;i<n;i++)
                for(j=v;j>=s[i];j--)
                dp[j]=max(dp[j],dp[j-s[i]]+s[i]);
                if(dp[v]!=sum-dp[v])
                printf("%d %d\n",dp[v],sum-dp[v]);
                else
                    printf("%d\n",dp[v]);
        }
        return 0;
    }
    

    C++ :

    
    #include <stdio.h>
    #define max(a,b) a>b?a:b
    int V,ans,n,w[21],sum[21];
    void dfs(int i,int cnt)
    {
        if(i == 0)
        {
            ans = max(ans,cnt);
            return ;
        }
        if(ans == V || cnt+sum[i] <= ans)       //cut
            return ;
        if(cnt+w[i] <= V)
            dfs(i-1,cnt+w[i]);
        dfs(i-1,cnt);
    }
    int main()
    {
        while(~scanf("%d",&n))
        {
            ans = 0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&w[i]);
                sum[i] = sum[i-1] + w[i];
            }
            V = sum[n]/2;
            dfs(n,0);
            if (2*ans<sum[n])printf("%d %d\n",ans,sum[n]-ans);
            else printf("%d\n",ans);
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    800
    时间
    3000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者