BZOJ4475 [Jsoi2015]子集选取】的更多相关文章

题目描述 输入 输入包含一行两个整数N和K,1<=N,K<=10^9 输出 一行一个整数,表示不同方案数目模1,000,000,007的值. 样例输入 2 2 样例输出 16   可以发现对于集合中每个元素的选取都是互不影响的,设$f(n,k)$为输入$n,k$时的答案,那么$f(n,k)=f(1,k)^n$. 我们现在来推导$f(1,k)$的结果:可以发现$1$的位置一定是连续的,设$a_{i}$表示第$i$列最后选取到了$a_{i}$行,若从第$1$列到第$m$列均存在被选取. 那么可以得…
Description 有一些\(\{1\dots n\}\)的子集\(A_{i,j}, 1\leq j\leq i\leq k\)共\(\frac{k(k+1)}2\)个,满足\(A_{i,j}\subset A_{i+1,j}, A_{i,j}\subset A_{i,j+1}\).求这些集合有多少种方案.如果\(A\)和\(B\)两种方案中存在\(i,j\)使得\(A_{i,j}\neq B_{i,j}\),则它们是不同的.\(n, k\leq 10^9\) Solution 对于\(n=…
数据范围过大说明这个题和组合一点关系也没有,答案基本上肯定是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的方案数,…
Description Input 输入包含一行两个整数N和K,1<=N,K<=10^9 Output 一行一个整数,表示不同方案数目模1,000,000,007的值. Sample Input 2 2 Sample Output 16 思路 首先因为每个元素都是独立的,所以可以分开考虑 然后如果只有一个元素,可以考虑\(dp_{i}\)表示i行i列的方案数 第i+1行如果放了前k个,那么前面的前k个都必须要放,所以只剩下一个\(dp_{i-1-k}\) 然后归纳一下发现就是\(2^k\) 所…
题意 题目链接 分析 显然可以看成一个位数为 \(n\) 的二进制数然后每一位分开考虑然后求和.最后的答案是 \(w^n\) 的形式. 考虑一个dp. 定义状态 \(f_{i}\) 表示选择了长度为 \(i\) 的三角的方案总数. 根据题意容易得到如果 \(A_{i,j}\) 可以为1,那么 \(A_{i-1,j}\ ,A_{i,j-1}\) 都要是1. 所以一行当中如果存在1的话一定是一段连续的前缀. 转移: \(f_i=1+\sum_{j=1}^{i-1}{f_j}\).枚举 \(i-1\)…
题目描述 数据范围 \(1\leq N,K \leq 10^9\) \(solution\) 集合S中每个元素互不影响,不妨依次考虑其中一个元素在三角形中的出现情况 问题转化为一个\(0/1\)的三角形\(\{A_{i,j}\}\),用\(0\)表示选了,\(1\)表示没选,那么如果\(A_{i,j}\)为\(1\),则\(A_{i,j}\)左边和上边都是\(1\) 考虑\(n\)比较小的情况,可以DP \(f_i\)表示一个\(i*i\)的三角形的方案数 对于\(f_i\),第\(i\)行一定…
题意: 思路: #include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> #include<cstring> #define MOD 1000000007 typedef long long LL; using namespace std; LL n,k,ans; LL pow(LL x,LL y) { LL s=; LL t=x; while(y) { )…
传送门 ps: 下面\(n\)和\(k\)好像和题目里的写反了...将就着看吧\(qwq\) 暴力打个表答案就出来了? 先写个结论,答案就是\(2^{nk}\). 为啥呢? 首先你需要知道,因为一个集合是另一个集合的子集这个东西,集合中的一个元素对其他元素并不会有影响,完全可以把元素分开来看,然后将答案乘起来. 那么转化成一个好像好解决点的问题,就是\(k = 1\)时怎么做. 因为只有一个元素,在加上要求是\(A_{i,j} \subseteq A_{i-1,j},A_{i,j} \subse…
233,扒题解的时候偷瞄到这个题的题解了,,GG 暴力发现是2^(nm),然后就是sb题了 #include <bits/stdc++.h> #define LL long long using namespace std; ; int ksm(int x, LL p) { ; ,x=(LL)x*x%mod) ) sum=(LL)sum*x%mod; return sum; } int n,m; int main() { cin>>n>>m; LL orz=(LL)n*…
链接:P6075 前言: 虽然其他大佬们的走分界线的方法比我巧妙多了,但还是提供一种思路. 题意: %&¥--@#直接看题面理解罢. 分析过程: 看到这样的题面我脑里第一反应就是DP,但是看到n和k的范围只能作罢.想到各种柿子又根本推不出来,于是颓废地打了个复杂度算不来的貌似是 \(2^{n^3}\) 的深搜.于是有以下测试: input      output 1 2         4 2 2         16 3 2         64 1 3         8 2 3      …