poj 3925 枚举+prime
/*
因为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的更多相关文章
- {POJ}{3925}{Minimal Ratio Tree}{最小生成树}
题意:给定完全无向图,求其中m个子节点,要求Sum(edge)/Sum(node)最小. 思路:由于N很小,枚举所有可能的子节点可能情况,然后求MST,memset()在POJ G++里面需要cstr ...
- 【POJ】1811 Prime Test
http://poj.org/problem?id=1811 题意:求n最小素因子.(n<=2^54) #include <cstdio> #include <cstring& ...
- POJ - 1080 枚举 / DP
要求max{F/P},先枚举下界lowf,再贪心求符合约束条件的n个最小价值和 记录F的离散值和去重可以大幅度常数优化 (本来想着用DP做的) (辣鸡POJ连auto都Complie Error) # ...
- poj 3189(枚举+多重匹配)
题目链接:http://poj.org/problem?id=3189 思路:由于题目要求最小的差值,而Range最多也才20,因此我们可以枚举上下限,多重匹配验证即可. http://paste.u ...
- POJ 1753 (枚举+DFS)
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 40632 Accepted: 17647 Descr ...
- POJ 2560 Freckles Prime问题解决算法
这个问题正在寻求最小生成树. 给定节点的坐标,那么我们需要根据各个点之间的这些坐标来计算距离. 除了这是标准的Prime算法的,能源利用Prime基本上,你可以使用Kruskal. 经典的算法必须填写 ...
- POJ 3279 枚举(思维)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10931 Accepted: 4029 Descrip ...
- POJ - 3279 枚举 [kuangbin带你飞]专题一
这题很经典啊,以前也遇到过类似的题--计蒜客 硬币翻转. 不过这题不仅要求翻转次数最少,且翻转方案的字典序也要最小. 解法:二进制枚举第一行的翻转方案,然后处理第二行,如果第二行的k列的上一列是黑色, ...
- POJ - 1222 / POJ - 3279 枚举第一行
说好的高斯消元法呢,暴搜都能0ms 这种翻转就是枚举第一行控制变量下面行就全都确定了 代码参考挑战程序设计例题 #include<iostream> #include<algorit ...
随机推荐
- (DP)51NOD 1118 机器人走方格
M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开.( ...
- Swift5.1 语言指南(二十九)高级运算符
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)
题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远 ...
- ACM_数数有多少(第二类Stirling数-递推dp)
数数有多少 Time Limit: 2000/1000ms (Java/Others) Problem Description: 小财最近新开了一家公司,招了n个员工,但是因为资金问题,办公楼只有m间 ...
- N - Binomial Showdown (组合数学)
Description In how many ways can you choose k elements out of n elements, not taking order into acco ...
- Android RecyclerView嵌套EditView实时更新Item数据
一.场景(例如:购物车) 1.当我们需要以列表样式管理某些数据时,可能需要列表项的某个字段可编辑 2.编辑Item上的某个字段后可能还要更新相关字段的值 二.可能遇到的问题 1.列表滑动导致输入框中的 ...
- QS之shell script
1 Invoke Mdoelsim In order to open Modelsim automatically, it is better to use a shell script to inv ...
- 音视频】5.ffmpeg命令分类与使用
GT其实平时也有一些处理音视频的个人或者亲人需求,熟练使用ffmpeg之后也不要借助图示化软件,一个命令基本可以搞定 G: 熟练使用ffmpeg命令!T :不要死记硬背,看一遍,自己找下规律,敲一遍, ...
- Xamarin View获取属性的绑定信息
public static Binding GetBinding( BindableObject self, BindableProperty property) { var methodInfo = ...
- os下,vs code 自动编译ts
nodejs安装ts npm install -g typescript 进入工程目录,用命令初始化ts(生成tsconfig.json) tsc --init 如果要指定生成目录,打开tsconfi ...