BZOJ4475: [Jsoi2015]子集选取【找规律】【数学】

Description

img

Input

输入包含一行两个整数N和K,1<=N,K<=10^9c++

Output

一行一个整数,表示不一样方案数目模1,000,000,007的值。spa

Sample Input

2 2code

Sample Output

16blog


思路

首先由于每一个元素都是独立的,因此能够分开考虑ip

而后若是只有一个元素,能够考虑\(dp_{i}\)表示i行i列的方案数ci

第i+1行若是放了前k个,那么前面的前k个都必需要放,因此只剩下一个\(dp_{i-1-k}\)input

而后概括一下发现就是\(2^k\)it

因此答案是\(2^{nk}\)io


#include<bits/stdc++.h>

using namespace std;

const int Mod = 1e9 + 7;

int mul(int a, int b) {
  return 1ll * a * b % Mod;
}

int fast_pow(int a, int b) {
  int res = 1;
  while (b) {
    if (b & 1) res = mul(a, res);
    b >>= 1;
    a = mul(a, a);
  }
  return res;
}

int main() {
  int n, k; cin >> n >> k;
  cout << fast_pow(fast_pow(2, n), k);
  return 0;
}
相关文章
相关标签/搜索