有n種物品和m個揹包,每種物品有無限個,現將若干個物品放到這些揹包中,知足:html
一、每一個揹包裏不能出現相同種類的物品(容許有空揹包);ios
二、在全部的m個揹包中,每種物品都出現過。c++
求方案數,對10^9+7取模。spa
考慮每一個物品在每一個揹包是否出現,那麼對於物品i,有2^m中方案,而後由於在全部揹包中每種物品至少要出現一次,因此要減去全不出現的方案,因此是2^m - 1,有n個物品,那麼就是(2^m -1)^nhtm
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define ll long long const int N=200005; const int mod=1e9+7; const double eps=1e-8; const double PI = acos(-1.0); #define lowbit(x) (x&(-x)) ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);} ll qpow(ll a,ll b){ll res=1;while(b){if(b&1) res=res*a%mod;a=a*a%mod;b>>=1;}return res;} ll inv(ll a,ll p){return qpow(a,p-2);} int main() { std::ios::sync_with_stdio(false); ll n,m; cin>>n>>m; cout<<qpow((qpow(2,m)-1+mod)%mod,n)<<endl; return 0; }