http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101
题目意思:求满足a=b+c+d的最大a。
下面给出的解法时间复杂度为n^3log(n),即先排序,查找d=a-b-c时用二分法。
其实还有一种n^2log(n)的解法,即先求出所有可能的b+c,再对其排序,最后二分查找a-d是否在其中。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void Search(int g[], int n)
{
sort(g, g + n);
for (int i = n - 1; i >= 0; i--)
for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++)
if (i != j && j != k && i != k)
{
int left = g[i] - g[j] - g[k];
if (left != g[i] && left != g[j] && left != g[k] && binary_search(g, g + n, left))
{
cout << g[i] << endl;
return;
}
}
cout << "no solution" << endl;
}
int main()
{
int n;
int g[1000];
while (cin >> n && n > 0)
{
for (int i = 0; i < n; i++)
cin >> g[i];
Search(g, n);
}
}