ZOJ 1101 Gamblers (简单搜索)

来源:互联网 发布:idle python gui 下载 编辑:程序博客网 时间:2024/05/16 08:39

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);}}


原创粉丝点击