您的位置:首页 > 其它

UVA - 10125 Sumsets

2014-11-02 12:40 323 查看
题目大意:给出一个集合,问集合里面是否有满足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;
				else
					num[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]);
		else
			printf("no solution\n");
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: