P6075 [JSOI2015]子集选取
luogu.com.cn/problem/P6075
https://www.cnblogs.com/wxq1229/p/12295145.html具体可以参考这里
说一下总结,计数时候要看看是不是有什么东西相互独立的,可以利用乘法原理。
一个人走n步时候(有k个方向,没有阻拦)可以去

上图 选自https://www.cnblogs.com/wxq1229/p/12295145.html
a*a的下三角矩阵中,有2^a种覆盖方法
每个数字2^k种类,那b个数字相互独立,就有2^ab 种类方法了
#include<iostream>
using namespace std;
typedef long long ll;
ll mod = 1e9+7;
ll k_q(ll a,ll b){
ll res = 1;
while(b){
if(b&1){
res = (res*a)%mod;
}
b>>=1;
a = (a*a)%mod;
}
return res;
}
int main(){
ll n,k;
cin>>n>>k;
ll ans = k_q(2,n)%mod;
ans = k_q(ans,k)%mod;
cout<<ans<<endl;
return 0;
}