BZOJ4475 JSOI2015子集选取(动态规划)
2024-08-28 10:50:27
数据范围过大说明这个题和组合一点关系也没有,答案基本上肯定是ab的形式了。暴力打表感觉不太好写,找到当年的题面发现还有个样例是6 40 401898087,于是暴力找ab=401898087的数,发现一组a=64 b=40,可以发现a=2n b=k,同时也符合第一组数据,于是就做完了。
可以发现集合中的数字互不影响,对每个数字分别考虑。问题变为在一个全0三角形中填一些1,使得若ai,j=1,则ai-1,j=ai-1,j=1。
容易发现每行为1的一定是一个前缀。设fi,j为第i行有j个1的方案数,则fi,j=Σfi-1,k (j<=k<=i-1),fi,i=1。归纳得fi,j=2i-j-1(i>j)。
那么这个填法的数量是2k,每个数字都有这么多填法,答案即为2nk。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define P 1000000007
int n,m;
int ksm(int a,int k)
{
int s=;
for (;k;k>>=,a=1ll*a*a%P) if (k&) s=1ll*s*a%P;
return s;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4475.in","r",stdin);
freopen("bzoj4475.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read();
cout<<ksm(ksm(,n),m);
return ;
}
最新文章
- MyEclipse无法删除项目下的文件
- 使用Xmanager远程连接CentOS6.4图形界面详解(图文)
- knockout之入门介绍
- MySQL登录报错";Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)";
- CentOS安装VSFTP及配置用户
- Application.Count.ToString()和Application[";count";].ToString()的区别
- MD5算法-爬虫学习(五)
- Jquery弹出窗口
- django初探-创建简单的博客系统
- Ubuntu 开启远程登录 SSH 的安装和配置
- [SQL]LeetCode262.行程和用户 | Trips and Users
- 如何正确使用Espresso来测试你的Android程序
- 【转】FluentAPI详细用法
- Spring(1)_Bean初始化
- 将H5页面的应用打包成APP(苹果和安卓版本)
- Java内存模型概念简单介绍,想深入自行百度
- SPLAY,LCT学习笔记(一)
- 晚期(运行期)优化---HotSpot虚拟机内的即时编译器
- SQL DATE_SUB 函数用法
- js中object的copy