• 挤牛奶


    挤牛奶

    Description

    小卡卡终于帮农夫John找到了走丢的那一头奶牛,John为了感谢小卡卡,不仅告诉了他在 Pascal山脉上可能存在Pascal圣地最大的宝藏,还说要请小卡卡喝牛奶。可是农夫John发现他家里所储藏的牛奶已经喝光了,所以要临时给奶牛挤奶。小卡卡实在是太好心了,说要帮农夫John一起挤牛奶。John答应了,他把他的n头奶牛中的n/2头(n是个偶数)分给小卡卡挤,他自己挤剩下的n/2头奶牛。但是每一头奶牛都有不同的产奶量,农夫John为了让小卡卡减轻负担,他希望他们两个所挤的牛奶的总量之差最小。小卡卡得知了每头奶牛的产奶情况之后很快就解决了这个问题。

    Input

    测试数据第一行一个整数n,n为偶数且小于100。表示有n头奶牛。第二行n个整数分别给出每头奶牛的产奶量(产奶量的总和不超过2000)。

    Output

    输出小卡卡和农夫所挤的牛奶量的最小差值。

    Sample Input

    6
    7 9 2 6 4 2
    

    Sample Output

    0
    
    

    HINT

    Source

    #include<bits/stdc++.h>
    using namespace std;
    bool f[101][2001];
    int n,a[101];
    int abbs(int x,int y)
    {
        if(x-y>0) return x-y;
        else return y-x;
    }
    int main()
    {
        cin>>n;
        int sum=0;
        for(int i=1;i<=n;i++)
        {
           scanf("%d",&a[i]);
            sum+=a[i];
        }
        memset(f,0,sizeof(f));
        f[0][0]=1;
         for(int i=1;i<=n;i++)
            for(int j=n;j>=0;j--)
                for(int k=2000;k>=0;k--)
                    if(f[j][k]==1)
                        f[j+1][k+a[i]]=1;
        int ans=sum;
        for(int i=0;i<=sum;i++)
        if(f[n/2][i]==1)
        {
            if(ans>abbs(i,sum-i))
            {
                ans=abbs(i,sum-i);
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    /**************************************************************
        Problem: 1608
        User: LJA001162
        Language: C++
        Result: 正确
        Time:40 ms
        Memory:1736 kb
    ****************************************************************/
    
  • 相关阅读:
    Android之Handler实现延迟执行
    static{}语句块
    (转)git常见错误
    smarty使用
    git简易操作
    angular路由——ui.route
    angular服务二
    angular服务一
    angualr 实现tab选项卡功能
    EF 集合版 状态版的 增加、删除、修改 的实践
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11867859.html
Copyright © 2020-2023  润新知