题意:有一个s数集,要求找到最大的d满足 a + b + c = d,四个数都在集合内且都不相等。
题解:如果只三层循环求值会超时,可以先排序,然后把最大的值赋给d,然后计算是否成立。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 1005;
int t, s[N], d, c, b, a;
int solve() {
for (d = t - 1; d >= 0; d--) {
for (c = t - 1; c >= 0 ; c--) {
if (s[d] == s[c])
continue;
for (b = t - 1; b >= 0; b--) {
if (s[d] == s[b] || s[c] == s[b])
continue;
for (a = t - 1; a >= 0; a--) {
if (s[a] == s[d] || s[a] == s[b] || s[a] == s[c])
continue;
if (s[d] == s[c] + s[b] + s[a])
return 1;
}
}
}
}
return 0;
}
int main() {
while (scanf("%d", &t) && t) {
for (int i = 0; i < t; i++)
scanf("%d", &s[i]);
sort(s, s + t);
if (solve())
printf("%d\n", s[d]);
else
printf("no solution\n");
}
return 0;
}