#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. 细说linux IPC(三):mmap系统调用共享内存

    [版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet 或 .../gentleliu,文章仅供学习交流,请勿用于商业用途]         前面讲到socket的进程间通 ...

  2. Linux性能查看与分析--命令行工具介绍

    本文介绍工作中常用的几个linux性能查看命令:top,sar,vmstat,iostat,pidstat等. 1.top top是最常用的linux性能分析工具,它能够实时的显示系统中各个进程的资源 ...

  3. 阿里云安装nginx 启动失败的原因。

    阿里云编译安装nginx服务器后启动一直报下面错误. 百度了一圈,看到一个说要先关掉apache服务,感觉这个好像是对的,立马做了下面操作. 果然把nginx起了起来. 从这边才知道apache和ng ...

  4. SKStoreReviewController之程序内评价

    在iOS 10.3出现之前,App实现评价方式一般有两种: (一)deep link调用.在app 链接地址后面拼上action=write-review这种方式可以实现程序内评价: (二)App跳转 ...

  5. java输入输出流实例代码

    1.编写一个程序,读取源代码文件的内容并在控制台输出.如果源文件不存在,则显示相应的错误信息. package src; import java.io.File; import java.io.Fil ...

  6. NIO原理图

  7. JavaScript数组的某些操作(一)

    在软件开发的过程中JavaScript的编程在所难免.当中对数组的操作尤为常见,这里介绍一下和JavaScript数组相关的某些操作: 1.删除并返回数组的第一个元素--shift方法: <!D ...

  8. js运行机制及异步编程(一)

    相信大家在面试的过程中经常遇到查看执行顺序的问题,如setTimeout,promise,async await等等,各种组合,是不是感觉头都要晕掉了,其实这些问题最终还是考察大家对js的运行机制是否 ...

  9. js 中继承的几种方式

    继承的方式一共有三种: 一.原型继承 通过prototype   来实现继承. function Person(name,age) { this.name=name; this.age=age; } ...

  10. Opencv+Zbar二维码识别(标准条形码/二维码识别)

    使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不 ...