zoukankan      html  css  js  c++  java
  • poj 2549 Sumsets

    poj 2549

    给出一个集合S,其中包含n个数字,请你选择四个数字a,b,c,d满足d=a+b+c,d要尽可能地大。

    请注意选择的数字不能是同一个元素,(大小可以相同)

    可以先固定d,把数字从大到小排一遍,然后先选d,在从1到n个元素中选一个a,(请注意a可以大于d,因为有可能d-a<0而且c+b<0),假如你选择了

    a[i]-a[j]作为d-a,之后的元素可以在j+1之后查找,为什么?因为a,b,c,d其中的a,b,c肯定会有一个先后顺序,而且d减去其中的任何一个,都能顺利地找到另外两个,因此我们可以把a从从往后找,那么另外的两个元素肯定就在j后面了。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int a[1111];
    bool cmp(int x1,int x2)
    {
        return x1>x2;
    }
    int main()
    {
        int n;
        while(cin>>n&&n)
        {
            for(int i=1;i<=n;i++) cin>>a[i];
            sort(a+1,a+n+1,cmp);
            int ans,flag=0;
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    if(i==j) continue;
                    int temp=a[i]-a[j];
                    for(int k=j+1;k<=n;k++)
                    {
                    for(int h=k+1;h<=n;h++)
                    {
                        if(a[k]+a[h]==temp)
                        {
                            ans=a[i];
                            flag=1;
                            goto stop;
                        }
                    }
                    }
                }
            }
            stop:;
            if(flag) cout<<ans<<endl;
            else     cout<<"no solution"<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    python学习之- 内置函数
    python学习之- 生成器/迭代器
    python学习之-- 装饰器
    python基础之
    Python基础之 一 字符编码及转换
    为什么utf8占用3个字节
    Python基础之 一 文件操作
    IIS6与IIS7中如何设置文件过期
    分布式缓存系统Memcached简介与实践
    Log4net
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/4924200.html
Copyright © 2011-2022 走看看