首页 > 代码库 > UVA1523-Helicopter(暴力+全排列)
UVA1523-Helicopter(暴力+全排列)
题目链接
题意:有八个乘客坐在直升机上,求重心M最小值。
思路:根据题目所给的公式,我们可以知道要使得M最小,也就是要使得Mv和Mh的和最小,我们可以使用全排列,分别将每个值放在各个位子上,然后更新最小值。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; int a[8]; int main() { while (1) { for (int i = 0; i < 8; i++) scanf("%d", &a[i]); if (!a[0] && !a[1] && !a[2] && !a[3] && !a[4] && !a[5] && !a[6] && !a[7]) break; sort(a, a + 8); double Min = INF; do{ double mv, mh, m; double x1, x2, y1, y2; x1 = a[5] + a[6] + a[7]; x2 = a[0] + a[1] + a[2]; y1 = a[2] + a[4] + a[7]; y2 = a[0] + a[3] + a[5]; mv = pow((x1 - x2), 2); mh = pow((y1 - y2), 2); m = sqrt(mv + mh); if (Min > m) Min = m; } while(next_permutation(a, a + 8)); printf("%.3lf\n", Min); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。