题目大意:
N台计算机连成网络,每台计算机上都同时运行着N种服务。对于每台计算机,可以选择仅一项服务,终止这台计算机和所有与它相邻计算机的该项服务。
求:最多可以让多少种服务完全终止运行。分析:
每台电脑能影响的范围都是一定的,跟它是什么服务没关系。
原问题<=> 将N台电脑分为一些组,满足每个组的电脑能影响的并集等于全集。求最大的组数。 dp[S]=max{dp[S],dp[s^s0]+1} (s0满足其包含的电脑能影响的并集等于全集)(参考了网上代码)
#include#include #include using namespace std;#define MAXN 16#define MAXST 65536int n,p[MAXN+10],c[MAXST+10],dp[MAXST+10],S;void read(){ int x,m; memset(p,0,sizeof p); for(int i=0;i