Aizu 2300 Calender Colors dfs
2024-10-08 12:44:04
原题链接: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 ;
}
最新文章
- 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
- 暑假CTF训练一
- Python学习之路—Day1
- Java算法-快速排序
- PMP学习感想
- iOS 分类思想(2)
- [Tommas] dateadd() 函数用法
- Apache、php、mysql单独安装配置
- openNebula libvirt-virsh attach disk device for kvm
- jQuery扩展函数设置所有对象只读
- Go VS Code 调式常见问题处理
- 5.jQuery
- Win10 开始运行不保存历史记录原因和解决方法
- hive条件函数
- sort方法实际应用详解---javascript中对一个对象数组按照对象某个属性进行排序
- LSTMs 长短期记忆网络系列
- teleport使用说明
- hdu2594 Simpsons&#39; Hidden Talents【next数组应用】
- shell脚本中 if 判断时候-s是什么意思
- 海量交通大数据应用平台MTDAP_nchang的经验记录
热门文章
- loj2090 「ZJOI2016」旅行者
- IOS开发学习笔记037-九宫格代码实现
- centOS如何设置时间同步
- phpmyadmin漏洞利用general_log和general_log_file拿权限
- Java求职实战之继承和多态
- Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]
- idea项目多模项目的搭建(复制)
- 关于JavaWeb开发的一些感悟
- 【POJ2774】Long Long Message (SA)
- BZOJ3260 跳 【组合数】