#include <stdio.h>
#include <set>
#include <string.h>
#include <algorithm>
using namespace std; const int maxn = ;
const int inf = ;
double minans;
int vis[maxn];//记录选中的点
int mp[maxn][maxn], ans[maxn][maxn];
int min_road[maxn]; int Prim(int n)
{
int i, j, min_i, minm, sum = ;
int dis[maxn];
int vis[maxn];
for (i = ; i <= n; i++)
dis[i] = ans[i][];
memset(vis, false, sizeof vis);
vis[] = true;
for (i = ; i<n; i++)
{
minm = inf, min_i = i;
for (j = ; j <= n; j++)
{
if (vis[j] == false && dis[j]<minm)
{
minm = dis[j];
min_i = j;
}
}
if (minm == inf)
break;
sum += minm;
vis[min_i] = true;
for (j = ; j <= n; j++)
{
if (vis[j] == && dis[j]>ans[min_i][j])
dis[j] = ans[min_i][j];
}
}
return sum;
} int ok(int n)
{
memset(vis, , sizeof vis);
int cnt = ;
int m = n, cont = ;
while (m)
{
if (m % )
vis[cont++] = cnt;
cnt++;
m /= ;
}
return cont;
} int main()
{
int d[maxn], maxm;
int n, i, j, k, cnt, m;
while (scanf("%d%d", &n, &m) != EOF)
{
if (n == && m == )
break;
maxm = ;
for (i = ; i <= n; i++)
maxm *= ;
for (i = ; i <= n; i++)
scanf("%d", &d[i]);
for (i = ; i <= n; i++)
{
for (j = ; j <= n; j++)
{
scanf("%d", &mp[i][j]);
}
}
minans = 9999999999.0;
int sum_point;
for (i = ; i < maxm; i++)
{
if (ok(i) == m + )
{
sum_point = ;
for (j = ; j <= m; j++)
{
sum_point += d[vis[j]];//选的点
for (k = j + ; k <= m; k++)
{
ans[j][k] = ans[k][j] = mp[vis[j]][vis[k]];
}
}
int sum = Prim(m);
if ((sum*1.0 / sum_point) < minans)
{
minans = sum*1.0 / sum_point;
for (i = ; i <= m; i++)
min_road[i] = vis[i];
}
}
}
for (i = ; i <= m - ; i++)
printf("%d ", min_road[i]);
printf("%d\n", min_road[i]);
}
return ;
}

hdu2489 Minimal Ratio Tree dfs枚举组合情况+最小生成树的更多相关文章

  1. HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)

    Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  2. HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)

    想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...

  3. hdu 2489 dfs枚举组合情况+最小生成树

    大家都说,搜索是算法的基础.今天最这题就有体会了.在n个顶点里选择m个顶点,求最小生成树.用到了深搜的回溯.所有情况都能枚举. #include<iostream> #include< ...

  4. hdu2489 Minimal Ratio Tree

    hdu2489 Minimal Ratio Tree 题意:一个 至多  n=15 的 完全图 ,求 含有 m 个节点的树 使 边权和 除 点权和 最小 题解:枚举 m 个 点 ,然后 求 最小生成树 ...

  5. HDU2489 Minimal Ratio Tree 【DFS】+【最小生成树Prim】

    Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  6. HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 Problem Description For a tree, which nodes and ...

  7. HDU 2489 Minimal Ratio Tree 最小生成树+DFS

    Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. HDU 2489 Minimal Ratio Tree(prim+DFS)

    Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. HDU 2489 Minimal Ratio Tree(暴力+最小生成树)(2008 Asia Regional Beijing)

    Description For a tree, which nodes and edges are all weighted, the ratio of it is calculated accord ...

随机推荐

  1. bash仅仅读的环境变量

    环境变量名 变量的用途 $0 程序的名字 $1~$9 命令參数1~9的值 $* 全部命令行參数的值 $@ 全部命令行參数的值.假设$@被""包含.即"$@",这 ...

  2. [转载]php中深拷贝浅拷贝

    转自:http://cnn237111.blog.51cto.com/2359144/1283163 PHP中提供了一种对象复制的操作,clone.语法颇为简单: $a = clone $b; 1.浅 ...

  3. CXF发布在Web服务

    1.下载apache-cxf-3.1.4,将jar引入新工程中. 2.People.java package com.soap.server; import java.util.Date; impor ...

  4. Java实现HttpClient发送GET、POST请求(https、http)

    1.引入相关依赖包 jar包下载:httpcore4.5.5.jar    fastjson-1.2.47.jar maven: <dependency> <groupId>o ...

  5. Hibernate commit() 和flush() 的区别

    <<精通Hibernate java对象持久化技术详解>> ,flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flus ...

  6. Sequelize入门一

    最近刚开始接触Sequelize,当中遇到不少坑,所以想写篇Sequelize入门和大家分享,避免有道友和我一样爬坑. 学习sequelize的初衷是想解决SQL注入,它支持MySQL, SQLite ...

  7. poj 1015 Jury Compromise(背包+方案输出)

    \(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...

  8. 深度学习入门-4.1 AND.py 源码分析

    源代码 ------------------------------------------------------------------------------------------------ ...

  9. 前端模块化开发的规范:AMD与CDM

    AMD, 异步模块定义. CMD,通用模块规范.

  10. POJ2955 Brackets —— 区间DP

    题目链接:https://vjudge.net/problem/POJ-2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Su ...