洛谷上挺简单的一题,不知道自己错在哪

img

1.兄弟们,洛谷的一道题我纠结很久了,题意很明确: 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且席位数越多越好. 但是如果某个政党退出后,其它党的席位要小于等于总数的一半。
但我不知为何我的方法只能对样例,其余的都是差一个结果

  1. #include
    using namespace std;
    int main()
    {
    int a,b,c,d,t;
    int k=0,j;
    int x,y[30000];
    cin>>x;
    for(a=0;a<x;a++)
    {
     cin>>y[a];
     k=k+y[a];
     j=k;
    
    }
    if(j%2!=0)(把这个去掉也是差一个结果)
    {
     j=j+1;
    
    }
    for(b=0;b<x-1;b++)(最原始版冒泡排序)
    {
     for(c=0;c<x-1-b;c++)
     {
         if(y[c]>y[c+1])
         {
             t=y[c];
             y[c]=y[c+1];
             y[c+1]=t;
         }
     }
    
    } for(d=0;d<x;d++)
    {
     if(k-y[d]>(j/2))
     {
         k=k-y[d];
     }
    
    } cout<<k;
    }

参考

#include<cstdio>
#include<algorithm>
using namespace std;
int a[305];
int f[100005];
int main()
{
    int n,sum=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        //f[a[i]]=1;
        sum+=a[i];
    }
    sort(a+1,a+n+1);
    int ans=0;
    for(int i=n;i>=1;i--)
    {
        for(int j=sum;j>=a[i];j--)
        {
            f[j]=max(f[j],f[j-a[i]]+a[i]);
            if(j-a[i]<=sum/2&&f[j]>sum/2)
            {
                ans=max(ans,f[j]);
            }
        } 
    } 
    printf("%d\n",ans);
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

最好把你的输入输出错误的结果发出来。