UVA - 10125 Sumsets

来源:互联网 发布:itunes如何删除软件 编辑:程序博客网 时间:2024/05/26 02:55

题目大意:给出一个集合,问集合里面是否有满足d = a+ b + c最大d(a,b,c,d都是集合里面的数字)

解题思路:先排序,d从最大的给,a也从最大的给,b从比a小的给,c取最小值,如果满足a+b+c=d,即满足条件,如果a+b+c < d,则让c变大,如果 a+b+c>d,则让b变小,具体请看代码

#include<cstdio>#include<set>#include<algorithm>using namespace std;long long num[1005];int a,b,c,d;int number;bool judge() {for(d = number - 1; d >= 0; d--)for(a = number - 1; a > 0; a--)for(b = a - 1, c = 0; b > c && a != d;)if(num[d] == num[a] + num[b] + num[c])return true;elsenum[d] > num[a] + num[b] + num[c] ? c++:b--;return false;}int main() {while(scanf("%d",&number) != EOF && number) {for(int i = 0; i < number; i++)scanf("%lld",&num[i]);sort(num,num+number);if(judge())printf("%lld\n",num[d]);elseprintf("no solution\n");}return 0;}


0 0
原创粉丝点击