码迷,mamicode.com
首页 > 其他好文 > 详细

子集枚举

时间:2019-03-15 14:47:47      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:++   重复   子集   col   i++   一个   style   span   max   

发现了一个很好玩的

可以枚举所有点对

1 for(int i=0;i<n;i++)
2     for(int S=0;S<(1<<n);S++){
3         d[i][S]=INF;
4         for(int j=0;j<i;j++)
5             if(S&(1<<j)
6                 dp[i][S]=max(dp[i][S],dist(i,j)+dp[i-1][S^(1<<i)^(1<<j)];
7     }

 S表示状态,i和j表示不同的点,并且i和j的枚举不会重复,因为保证了j<i

对于每一个i

都有1<<n个S可以枚举

例如n=6

状态可以是:

000000

000001

000011

000111

010101

.......

1111111

S^(1<<i)^(1<<j)表示i,j不在该集合内

S&(1<<i)==true  表示第i位元素存在

 

子集枚举

标签:++   重复   子集   col   i++   一个   style   span   max   

原文地址:https://www.cnblogs.com/guaguastandup/p/10536597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!