HDU 2489 Minimal Ratio Tree(枚举组合+最小生成树)
2015-08-25 16:05
471 查看
2008年北京现场赛真题
没什么好说的,套两个板,一个枚举组合的板,一个最小生成树的板。就OK了
没什么好说的,套两个板,一个枚举组合的板,一个最小生成树的板。就OK了
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<iomanip> #define INF 99999999 using namespace std; const int MAX=15+5; int edge[MAX][MAX],dist[MAX],node[MAX];//node记录最终选的点 int vale[MAX],temp[MAX],n,m;//temp记录选的m个点 double minratio; bool mark[MAX]; int Prim(int s){ int sum=0; for(int i=1;i<=m;++i)mark[temp[i]]=false,dist[temp[i]]=edge[s][temp[i]]; mark[s]=true; dist[s]=0; for(int i=1;i<m;++i){ int point=s; for(int j=1;j<=m;++j){ if(point == s && !mark[temp[j]])point=temp[j]; if(!mark[temp[j]] && dist[point]>dist[temp[j]])point=temp[j]; } mark[point]=true; sum+=dist[point]; for(int j=1;j<=m;++j){ if(!mark[temp[j]] && edge[point][temp[j]]<dist[temp[j]])dist[temp[j]]=edge[point][temp[j]]; } } return sum; } void dfs(int k,int num){ if(num == m){ int ans=0; for(int i=1;i<=m;++i)ans+=vale[temp[i]]; double sum=Prim(k)*1.0/ans; if(sum-minratio<-(1e-9)){ minratio=sum; for(int i=1;i<=m;++i)node[i]=temp[i]; } return; } if(n-k+num<m)return; for(int i=k+1;i<=n;++i){ temp[num+1]=i; dfs(i,num+1); } } int main(){ while(cin>>n>>m,n+m){ minratio=INF*1.0; for(int i=1;i<=n;++i)cin>>vale[i]; for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ cin>>edge[i][j]; } } for(int i=1;i<=n;++i){ temp[1]=i; dfs(i,1); } for(int i=1;i<m;++i)cout<<node[i]<<' '; cout<<node[m]<<endl; } return 0; }
相关文章推荐
- 工作体会之系统对接
- 在eclipse中配置maven项目
- Item 10:赋值运算符要返回自己的引用 Effective C++笔记
- Item 9:在析构/构造时不要调用虚函数 Effective C++笔记
- 规则引擎 visualrules 开发基础教程【连载2】-- 安装篇
- PAT 1066. Root of AVL Tree (25)
- 用Python操作Mysql
- MFC视频教程(孙鑫)学习笔记1-Windows程序内部运行原理
- rails nginx passenger postgre 在ubuntu部署
- ios获取左右眼图片景深图
- windows mysql 自动备份的几种方法
- 经典问题之汉诺塔
- <context-param>与<init-param>的区别与作用
- jqGrid怎么设置初始化页面时不加载数据(不向服务器请求数据)
- easyui-combobox如何使用选择器
- 哈希表与哈希函数 C实现
- Activity的生命周期&finish方法&back键&home键&dialog对话框
- hdu5384 Danganronpa
- grabCut函数
- 第八集 顺序最小优化算法