#include<iostream>
int main()
{
int n;
std::cin>>n;
std::cout<<(1<<n)-1;
}
这道题看可以从状态转换的角度考虑,用位运算思想去想象一个二进制数,对于某一位而言,1代表拥有这个权限,0代表不拥有这个权限。易知,所有的拥有情况都是不重复的,恰好满足题意。所以,我们只需要让每一个数的二进制表示都拥有唯一一个1就可以了。这样既可以满足拥有最大权限的时候权限值最小(因为都是不可去除的1,没有任何0,这代表这个二进制数的位数是最小的),又可以满足任何状态都不互斥(每种选取状态唯一)。 所以,有几个权限,我们获取的最大权限值其实就是在二进制表示下有几个1——最小权限值为(1<<n)-1。