看了官方题解+q神的讲解才懂。。。

智商问题。。

讲道理。。数学真的比脱单难啊。。。


题目链接:

http://codeforces.com/problemset/problem/660/E

题意:

给定数字范围,问由这些数字组成的长度为n的串的子序列有多少种?

分析:

方法一:

枚举长度k,计算以其为子序列的原串种数。

k=0时,ans=mn

k≥1时,设序列元素为x1,x2,x3...xk,为了避免重复,我们假设当前位置是第一次出现xi,即要求x1之前的元素不会出现x1,x1和x2之间的元素不会出现x2,依次类推,每个间隔中的每个元素都为m−1种。

最后枚举xk结束的位置,即xk后面的元素个数j,这些元素每个有m种可能。由于我们枚举了xk的位置,那么前k−1个元素的位置就有(n−j−1k−1)种。

这样对于每个k,我们可以得到公式:

∑j=0n−kmkmj(m−1)n−j−k(n−j−1k−1)

令s=n−j,则有

∑k=1n∑s=knmkmn−s(m−1)s−k(s−1k−1)
(交换求和)=∑s=1n∑k=1smkmn−s(m−1)s−k(s−1k−1)

后一项求和利用二项式定理进行化简,最终得到

=∑s=1nmn−s+1∗(2m−1)s−1

代码:

#include <iostream>
using namespace std;
const int mod = 1e9 + 7;
int quick_pow(int a, int b)
{
int ans = 1;
for(;b;b >>= 1, a = a * 1ll * a % mod){
if(b & 1) ans = ans * 1ll * a % mod;
}
return ans;
}
int main()
{
int n, m;cin>>n>>m;
int ans = quick_pow(m, n);
for(int s = 1; s <= n; s ++)
ans = (ans + quick_pow(m, n - s+ 1) * 1ll * quick_pow( 2 * m - 1, s - 1)) % mod;
cout<<ans<<endl;
return 0;
}

然后可以发现这个就是个等比数列。

最后不要忘记加上空串的mn。

#include <iostream>
using namespace std;
const int mod = 1e9 + 7;
int quick_pow(int a, int b)
{
int ans = 1;
for(;b;b >>= 1, a = a * 1ll * a % mod){
if(b & 1) ans = ans * 1ll * a % mod;
}
return ans;
}
int main()
{
int n, m;cin>>n>>m;
int ans ;
if(m == 1) ans = n + 1;
else
ans = (quick_pow(m, n) + m * 1ll * (quick_pow(2 * m - 1, n) - quick_pow(m, n)) % mod * quick_pow(m - 1, mod - 2) % mod) % mod;
cout<<ans<<endl;
return 0;
}

方法二:

还有一种卿学姐的dp方法。。

Codeforces 660E Different Subsets For All Tuples【组合数学】的更多相关文章

  1. Educational Codeforces Round 11 E. Different Subsets For All Tuples 动态规划

    E. Different Subsets For All Tuples 题目连接: http://www.codeforces.com/contest/660/problem/E Descriptio ...

  2. 【CF660E】Different Subsets For All Tuples 结论题

    [CF660E]Different Subsets For All Tuples 题意:对于所有长度为n,每个数为1,2...m的序列,求出每个序列的本质不同的子序列的数目之和.(多个原序列可以有相同 ...

  3. Different Subsets For All Tuples CodeForces - 660E (组合计数)

    大意: 定义$f(a)$表示序列$a$本质不同子序列个数. 给定$n,m$, 求所有长$n$元素范围$[1,m]$的序列的$f$值之和. 显然长度相同的子序列贡献是相同的. 不考虑空串, 假设长$x$ ...

  4. 【CF660E】Different Subsets For All Tuples(组合数学)

    点此看题面 大致题意: 有一个长度为\(n\)的数列,每个位置上数字的值在\([1,m]\)范围内,则共有\(m^n\)种可能的数列.分别求出每个数列中本质不同的子序列个数,然后求和. 一些分析 首先 ...

  5. 【组合数学】cf660E. Different Subsets For All Tuples

    比较套路的组合数学题 For a sequence a of n integers between 1 and m, inclusive, denote f(a) as the number of d ...

  6. codeforces 1284C. New Year and Permutation(组合数学)

    链接:https://codeforces.com/problemset/problem/1284/C 题意:定义一个framed segment,在区间[l,r]中,max值-min值 = r - ...

  7. Codeforces 979E Kuro and Topological Parity - 动态规划 - 组合数学

    题目传送门 传送点 题目大意 给定$n$个标号依次为$1, 2, \cdots, n$的点,其中一些点被染成一些颜色,剩下的点没有染色.你需要添加一些有向边并将剩下的点染色,满足有向边从编号小的一端指 ...

  8. Codeforces Round #309 (Div. 1) A(组合数学)

    题目:http://codeforces.com/contest/553/problem/A 题意:给你k个颜色的球,下面k行代表每个颜色的球有多少个,规定第i种颜色的球的最后一个在第i-1种颜色的球 ...

  9. Codeforces 895C - Square Subsets

    895C - Square Subsets 思路:状压dp. 每个数最大到70,1到70有19个质数,给这19个质数标号,与状态中的每一位对应. 状压:一个数含有这个质因子奇数个,那么他状态的这一位是 ...

随机推荐

  1. 在项目中运用精益 - Five Why

    今天成功地运用了5个why对一个项目上的问题进行剖析,收获良多,在此分享给大家. 事情是这样的,该项目是个固定价格项目,处于收尾阶段,客户提出来了一些需求,我们(实施方)认为这些要求是不在最初项目范围 ...

  2. SQLite – GLOB子句

    SQLite – GLOB子句 .与LIKE不同,GLOB是大小写敏感的,它遵循语法的UNIX指定以下通配符. The asterisk sign (*) The question mark (?) ...

  3. (转)SpringMVC学习(十)——SpringMVC与前台的json数据交互

    http://blog.csdn.net/yerenyuan_pku/article/details/72514022 json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析 ...

  4. js生成随机的uuid

    function generateUUID() { var d = new Date().getTime(); if(window.performance && typeof wind ...

  5. dumpkeys - 转储显示键盘翻译表

    总览 (SYNOPSIS) dumpkeys [ -hilfn1 -Sshape -ccharset --help --short-info --long-info --numeric --full- ...

  6. javaweb系列-关于HttpSessionListener的sessionDestroyed什么时候触发

    根据书本写了下面这个监听器,然后开始调试,打开一个浏览器来访问该网页,可以正常触发sessionCreated,然后关闭浏览器,发现没有触发sessionDestroyed,然后我怀疑是不是这个监听器 ...

  7. Java中类,对象,方法的内存分配

    Java中类,对象,方法的内存分配 以下针对引用数据类型: 在内存中,类是静态的概念,它存在于内存中的CodeSegment中. 当我们使用new关键字生成对象时,JVM根据类的代码,去堆内存中开辟一 ...

  8. 谷歌 滚动条样式 scrollbar

    谷歌  滚动条样式 scrollbar main.less :: 是css3 最新的伪类 /*滚动条整体样式*/ ::-webkit-scrollbar { width: 10px; height: ...

  9. C++构造函数(复制构造函数)、析构函数

    注:若类中没有显示的写如下函数,编译会自动生成:默认复制构造函数.默认赋值构造函数(浅拷贝).默认=运算符重载函数(浅拷贝).析构函数: 1.默认构造函数(默认值)构造函数的作用:初始化对象的数据成员 ...

  10. zabbix auto discovery

    1.configuration>discovery>create discovery rule ip range:192.168.43.2-254 check: http 80 2.con ...