【JSOI2015】【JZOJ 4058】子集选取
2017-02-11 20:46
441 查看
Description
Analysis
设F(n,k)表示读入n,k的答案First step
考虑到每个元素之间其实是互相独立的,所以F(n,k)=F(1,k)n我们只需快速求出F(1,k)
Second step
这是一个三角形A[i]表示第i列最后一个1的行(该行以上全为1,以下全为0)
显然有A[i]>=A[i+1]
设G[i][j]表示第i行,最后一个1的行为j的方案数,则
G[i][j]=∑kp=jG[i−1][p]=G[i−1][j]+G[i][j+1]
这便是组合数的形式
写出来,发现其实是倒放的杨辉三角
G[i,j]
1
14
136
1234
11111
因为可以在任意一个位置结束,也可以全不选,所以
F(1,k)=1+∑G[i][j]=2k
所以Ans=2nk
Code
#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const int N=11,mo=1e9+7; ll n,k; ll qmi(ll x,ll n) { ll t=1; for(;n;n>>=1) { if(n&1) t=t*x%mo; x=x*x%mo; } return t; } int main() { freopen("subset.in","r",stdin); freopen("subset.out","w",stdout); scanf("%lld %lld",&n,&k); printf("%lld\n",qmi(2,n*k)); return 0; }
相关文章推荐
- Json转换利器Gson之实例五-实际开发中的特殊需求处理
- JavaScript中创建对象方法总结
- Json转换利器Gson之实例四-Map处理(下)
- Json转换利器Gson之实例三-Map处理(上)
- 学习JavaScript中的异步Generator
- express框架下index.js和index.ejs的注释版
- JavaScript --- 事件处理
- JavaScript 变量作用域、this、闭包
- 跟小博老师一起学Servlet ——Servlet生命周期
- JavaScript练习之添加纪录(简洁方法)
- JavaScript全局对象
- JavaScript练习之添加纪录
- JavaScript练习之删除记录
- js高级程序设计笔记--Ajax与comet
- js高级程序设计笔记--Ajax与comet
- Json转换利器Gson之实例一-简单对象转化和带泛型的List转化
- JavaScript练习之全选反选练习
- ajax提交的javascript代码
- JavaScript基础技巧44
- JavaScript练习之图片切换