原题链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2300

题意:

给你一个图,让你生成一个完全子图。使得这个子图中每个点的最小边的和最大。。好拗口,但是就是这么回事。。

题解:

就直接dfs就好,搜啊搜啊,就做出来了。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#define MAX_N 20
#define MAX_S 1<<20
using namespace std; double dp[MAX_S]; double L[MAX_N],a[MAX_N],b[MAX_N]; int N,M; int getOnes(int s) {
int res = ;
while (s) {
if (s & )res++;
s >>= ;
}
return res;
} bool vis[MAX_S]; double dis(int i,int j) {
return (L[i] - L[j]) * (L[i] - L[j]) + (a[i] - a[j]) * (a[i] - a[j]) + (b[i] - b[j]) * (b[i] - b[j]);
} void dfs(int s) {
for (int i = ; i < N; i++) {
if (( << i) & s)continue;
int t = ( << i) | s;
if (vis[t])continue;
vis[t] = ;
double sum = ;
for (int j = ; j < N; j++)
if (( << j) & s)
sum += dis(i, j);
dp[t] = dp[s] + sum;
dfs(t);
}
} int main() {
scanf("%d%d", &N, &M);
for (int i = ; i < N; i++)
scanf("%lf%lf%lf", &L[i], &a[i], &b[i]);
dfs();
double ans = ;
for (int i = ; i < ( << N); i++)
if (getOnes(i) == M)
ans = max(ans, dp[i]);
printf("%.5f\n", ans);
return ;
}

最新文章

  1. 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
  2. 暑假CTF训练一
  3. Python学习之路—Day1
  4. Java算法-快速排序
  5. PMP学习感想
  6. iOS 分类思想(2)
  7. [Tommas] dateadd() 函数用法
  8. Apache、php、mysql单独安装配置
  9. openNebula libvirt-virsh attach disk device for kvm
  10. jQuery扩展函数设置所有对象只读
  11. Go VS Code 调式常见问题处理
  12. 5.jQuery
  13. Win10 开始运行不保存历史记录原因和解决方法
  14. hive条件函数
  15. sort方法实际应用详解---javascript中对一个对象数组按照对象某个属性进行排序
  16. LSTMs 长短期记忆网络系列
  17. teleport使用说明
  18. hdu2594 Simpsons&#39; Hidden Talents【next数组应用】
  19. shell脚本中 if 判断时候-s是什么意思
  20. 海量交通大数据应用平台MTDAP_nchang的经验记录

热门文章

  1. loj2090 「ZJOI2016」旅行者
  2. IOS开发学习笔记037-九宫格代码实现
  3. centOS如何设置时间同步
  4. phpmyadmin漏洞利用general_log和general_log_file拿权限
  5. Java求职实战之继承和多态
  6. Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]
  7. idea项目多模项目的搭建(复制)
  8. 关于JavaWeb开发的一些感悟
  9. 【POJ2774】Long Long Message (SA)
  10. BZOJ3260 跳 【组合数】