【结论】【状压DP】
来源:互联网 发布:什么是根域名服务器 编辑:程序博客网 时间:2024/06/15 18:35
1、
在n个节点的无向图中选n/2条边,使得点两两配对,并使得所选边权值最小
阶段:每一种已选点组成的集合
状态:s表示已选的点的集合,f[s]表示已选出的点连边后的最小权值。
决策:每条边选或不选
方程:f[sU{u,v}]=min f[s]+w(u,v)
代码:
for(int i=0;i<=s;i++) f[i]=inf; f[0]=0; for(int i=0;i<=s;i++) { for(u=0;(i>>u)&1;u++); //找最小的、没选出的点 for(v=u+1;v<nn;v++) //枚举比u大的点 if(!((i>>v)&1))//如果没选 { t=i|(1<<u)|(1<<v); f[t]=min(f[t],f[i]+ma[g[u]][g[v]]); } }ans=f[s];
EG:http://blog.csdn.net/y__xv/article/details/51997443
2、
找出简单有向图的哈密顿回路
状态:f[s][i],表示已走过的点的集合为s,最后停下的点为i时,走过边最短距离。
方程:f[s{v}][v]=min(f[s][u]+w(u,v))
for(int j,i=1;i<=s;i++) for(j=0;j<=n;j++) f[i][j]=1e9; f[1][0]=0; int u,v,t; for(int i=1;i<=s;i++) for(u=0;u<=n;u++) if((i>>u)&1) for(v=0;v<=n;v++) if(!((i>>v)&1)) { t=i|(1<<v); f[t][v]=min(f[t][v],f[i][u]+a[u][v]); } int ans=1e9; for(int i=1;i<=n;i++) { ans=min(ans,f[s][i]+a[i][0]); }
EG:http://blog.csdn.net/y__xv/article/details/51997772
3、
有n个物品,m个容器,每个容器只能装某一个特定的子集,不能多也不能少。每个容器有相应的费用,现在希望把全部物品都装进容器,且使用容器的总费用最少。(m可能非常非常大)
状态:f[s]表示已选物品的集合s所能取得的最小费用
方程:f[s]=min(f[s\t]+w[t])
枚举子集:
for(i=s&(s-1);i;i=s&(i-1)) //从大到小枚举s的所有非空真子集
0 0
- 【结论】【状压DP】
- [UOJ244]短路 结论+dp
- hdu 5000 dp+推导结论
- [BZOJ4475][JSOI2015]子集选取(DP+结论)
- bzoj1860 [Zjoi2006]麻将 结论+插数dp
- 结论
- bzoj1237 [SCOI2008]配对 贪心结论+插数dp
- 十一 结论
- IsPostBack结论
- 数学结论
- 【结论】【高精度】
- 【结论】Dijkstra
- 面试结论
- 两个深刻的结论
- uClibc体验---6-结论
- 结论:我傻
- MATLAB资料结论
- 假设和结论
- python-pickle/cPickle/glob/tarfile
- 用opencv自带的traincascade车辆检测
- 【POJ2286】The Rotation Game
- 关于我
- java打印文件夹以及文件的路径打印
- 【结论】【状压DP】
- 旋转数组的最小数字
- R语言如何导入数据
- CodeForces 699C Vacations
- Numpy 常用函数及读写操作
- 欢迎使用CSDN-markdown编辑器
- android 获取ip地址,获取2,3,4g,wifi状态等
- 转载:python使用urllib2抓取防爬取链接
- 剑指offer——和为s的两个数字且乘积最小