/*
因为15很小可以暴力枚举然后用最小生成树的prim来计算
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 40
#define inf 0x3fffffff
int a[N],f[N],en[N];
int ma[N][N],n,m;
double dd;
void prime(){
int i,j,vv[N],dis[N],sum,total;
double rato;
for(i=1;i<=m;i++)
dis[i]=inf;
sum=a[f[1]];
//printf("%d ",f[1]);
for(i=2;i<=m;i++) {
// printf("%d ",f[i]);
if(ma[f[1]][f[i]]!=inf)
dis[f[i]]=ma[f[1]][f[i]];
sum+=a[f[i]];
}
//printf("\n");
total=0;
memset(vv,0,sizeof(vv));
vv[f[1]]=1;
for(i=1;i<=m-1;i++) {
int minn=inf,index;
for(j=1;j<=m;j++)
if(!vv[f[j]]&&minn>dis[f[j]]) {
minn=dis[f[j]];
index=f[j];
}
//printf("%d\n",minn);
total+=minn;
vv[index]=1;
for(j=1;j<=m;j++)
if(!vv[f[j]]&&dis[f[j]]>ma[index][f[j]])
dis[f[j]]=ma[index][f[j]];
}
// printf("%d %d\n",total,sum);
rato=1.0*total/(1.0*sum);
if(rato<dd) {
dd=rato;
for(i=1;i<=m;i++)
en[i]=f[i];
}
return ;
}
void dfs(int i,int cou) {
if(cou==m) {
prime();
}
for(;i<=n;i++) {
f[cou+1]=i;
dfs(i+1,cou+1);
}
}
int main() {
int i,j;
while(scanf("%d%d",&n,&m),n||m) {
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&ma[i][j]);
dd=inf;
for(i=1;i<=n;i++) {
f[1]=i;
dfs(i+1,1);
}
for(i=1;i<=m-1;i++)
printf("%d ",en[i]);
printf("%d\n",en[i]);
}
return 0;
}

poj 3925 枚举+prime的更多相关文章

  1. {POJ}{3925}{Minimal Ratio Tree}{最小生成树}

    题意:给定完全无向图,求其中m个子节点,要求Sum(edge)/Sum(node)最小. 思路:由于N很小,枚举所有可能的子节点可能情况,然后求MST,memset()在POJ G++里面需要cstr ...

  2. 【POJ】1811 Prime Test

    http://poj.org/problem?id=1811 题意:求n最小素因子.(n<=2^54) #include <cstdio> #include <cstring& ...

  3. POJ - 1080 枚举 / DP

    要求max{F/P},先枚举下界lowf,再贪心求符合约束条件的n个最小价值和 记录F的离散值和去重可以大幅度常数优化 (本来想着用DP做的) (辣鸡POJ连auto都Complie Error) # ...

  4. poj 3189(枚举+多重匹配)

    题目链接:http://poj.org/problem?id=3189 思路:由于题目要求最小的差值,而Range最多也才20,因此我们可以枚举上下限,多重匹配验证即可. http://paste.u ...

  5. POJ 1753 (枚举+DFS)

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40632   Accepted: 17647 Descr ...

  6. POJ 2560 Freckles Prime问题解决算法

    这个问题正在寻求最小生成树. 给定节点的坐标,那么我们需要根据各个点之间的这些坐标来计算距离. 除了这是标准的Prime算法的,能源利用Prime基本上,你可以使用Kruskal. 经典的算法必须填写 ...

  7. POJ 3279 枚举(思维)

    Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10931   Accepted: 4029 Descrip ...

  8. POJ - 3279 枚举 [kuangbin带你飞]专题一

    这题很经典啊,以前也遇到过类似的题--计蒜客 硬币翻转. 不过这题不仅要求翻转次数最少,且翻转方案的字典序也要最小. 解法:二进制枚举第一行的翻转方案,然后处理第二行,如果第二行的k列的上一列是黑色, ...

  9. POJ - 1222 / POJ - 3279 枚举第一行

    说好的高斯消元法呢,暴搜都能0ms 这种翻转就是枚举第一行控制变量下面行就全都确定了 代码参考挑战程序设计例题 #include<iostream> #include<algorit ...

随机推荐

  1. 源码阅读之LinkedList(JDK8)

    inkedList概述 LinkedList是List和Deque接口的双向链表的实现.实现了所有可选列表操作,并允许包括null值. LinkedList既然是通过双向链表去实现的,那么它可以被当作 ...

  2. Linux之线程相关命令及常用命令

    查进程 top命令:查看系统的资源状况.#top top -d 10     //指定系统更新进程的时间为10秒 ps:查看当前用户的活动进程.#ps -A ps命令查找与进程相关的PID号: ps ...

  3. 横向移动-广告图(web)

    项目 (移动的广告牌) 要求: 1,实现图片一次以移动的方式出现,到最后一张完全出现时,回弹到第一张 2,鼠标放在图片上面图片移动,鼠标离开,图片停止移动 HTML结构 <!DOCTYPE ht ...

  4. Spring.Net学习笔记(7)-事务

    一.开发环境 操作系统:Win7 编译器:VS2010 二.涉及程序集 Spring.Core.dll Spring.Data.dll Common.Logging.dll 三.开发过程 1.项目结构 ...

  5. linux小白成长之路5————安装Docker

    1.安装docker 命令: yum -y install docker   2.启动docker 命令: systemctl start docker.service 3.查看docker版本 ...

  6. Dojo - 操作Dom的函数

    DOM Manipulation You might be seeing a trend here if you have gotten this far in the tutorial, in th ...

  7. 用Python利用pyFirmata控制Arduino实现Blink

    2018-03-2809:20:44 arduino中有相应的库 1.安装pyFirmata包 pip install pyFirmata 在python2.7或python3.X下都可以执行. py ...

  8. MySQL与MongoDB的操作对比

    MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...

  9. Caffe RPN:把RPN网络layer添加到caffe基础结构中

    在测试MIT Scene Parsing Benchmark (SceneParse150)使用FCN网络时候,遇到Caffe错误. 遇到错误:不可识别的网络层crop 网络层 CreatorRegi ...

  10. VS2015 安装包缺失(联网安装失败)问题解决

    Win7 x86 测试可行 *  如果前面有尝试过安装不成功, 一定要用卸载程序删除已安装的部分,否则会出乱子. 1. 或者是用虚拟光驱加载ISO, 或者是解压到硬盘上, 都没有关系. 2. 用管理员 ...